2014年10月18日土曜日

NASからAndroid内のSDカード上へデータをコピー



PCの共有フォルダにAndroidからアクセス(ESファイルエクスプローラ使用)
http://madeinpc.blog50.fc2.com/blog-entry-826.html#more

AndroidにFTPサーバーをたててPCからアクセス(ESファイルエクスプローラ使用)
http://madeinpc.blog50.fc2.com/blog-entry-828.html

特にAndroidを操作する方法では、直接NASを覗けていい感じである。

が、どちらのやり方でも、デバイスのローカル領域へのコピーは成功するが、SDカードへコピーする段階で失敗する(直接コピー・クリップボード経由のコピー、共に失敗)。

検索したらAndroid4.4からの権限問題だった。
http://saponoblog.seesaa.net/article/399165076.html
http://octoba.net/archives/20140821-android-feature-kitkat-cant-write-sd.html

ESファイルエクスプローラがBaiduと繋がっているという話もある。
http://bylines.news.yahoo.co.jp/yamamotoichiro/20140811-00038166/

そうでなくてもタスクマネージャから終了しても通知アイコンが消えず、鬱陶しいのでアンインストール。

代替として、SDカードへのコピーが可能との記述のあるFileCommanderをGoogle Playからインストールして試してみたが駄目だった。どうやらプリインストールされているものでないと駄目らしい。
http://app-roid.com/blog-entry-1288.html

プリインストールならばと「マイファイル」(インターフェースから察するに、中身FileCommanderっぽい)を試してみたら、SDカード上へのコピーに成功した。
FTPクライアント機能があるので、NASにFTPサーバを立てれば使い物になるかもしれない。面倒臭いけど。

容量を喰うメディアデータはクラウドやストリーミングで処理し、Androidでファイラを使用すべきでない時期に来ているのかもしれない。
そうなるとデバイスには外部ストレージ要らなくなり、面倒くさいので代わりにメディアプレーヤーが欲しくなる。
NW-A16欲しい。

2014年5月14日水曜日

apportエラー

ソフトウェアセンターをアップデートしたら、ブートするごとに以下のエラーメッセージが発生されるようになった。

残念ながら、Ubuntu14.04で内部エラーが発生しました。

レポートを見ると、apportサービスなるものが関わっているらしい。
▼ExclutablePath
/usr/share/apport/apportcheckresume

▼Package
 linux-image-3.13-0-24-generic 3.13.0-24.47

【以下略】

apportサービスを止める事で、再起動時にエラーメッセージが出ることは無くなった。
sudo service apport stop

設定ファイルを編集する事で恒久的に停止させることが出来るようだけど、素早い修正が行われることを期待して行わない事にする。

■参考文献
Internal error with apport-gpu-error-intel.py
How To Disable The Apport Error Reporting On Ubuntu 14.04 Trusty Tahr

2014年5月5日月曜日

無線はハードウェアのスイッチで無効になっています

ubuntu14.04にしたら、いつの間にやらWi-fiが使用出来なくなっていた。
システム設定 > ネットワークを開くと、"無線"のプロパティが"オフ"になっていて"オン"にする事が出来ない。
右上のネットワークアイコンをクリックすると「無線はハードウェアのスイッチで無効になっています」とステータス表示されていて、"Wi-fiを有効にする"は半透明状態で設定する事が出来ない。

結論からいうと、キーボード上のショートカットキーで無効化されていたのが原因で、もう一度押下すると無事に繋がるようになった。ショートカットキーはOSの更に下で動作しているのだなあ。

解決の処方はこれだけで、残りは調査時のメモ。

ショートカットキーで無効化されている状態のWi-fiを、lshwとrfkillコマンドでステータス表示してみた。rfkillはWi-fiやBluetoothといった無線デバイスへのインターフェースを提供するものらしい。

~$ sudo lshw -C network
  *-network 無効          
       詳細: 無線インターフェース
       製品: RTL8723AE PCIe Wireless Network Adapter
       ベンダー: Realtek Semiconductor Co., Ltd.
       物理ID: 0
       バス情報: pci@0000:03:00.0
       論理名: wlan0
       バージョン: 00
       シリアル: **:**:**:**:**:**
       幅: 64 bits
       クロック: 33MHz
       性能: pm msi pciexpress bus_master cap_list __________________ physical wireless
       設定: broadcast=yes driver=rtl8723ae driverversion=3.13.0-24-generic firmware=N/A latency=0 link=no multicast=yes wireless=IEEE 802.11bgn
       リソース: irq:18 IOポート:d000(サイズ=256) メモリー:f7900000-f7903fff
【省略】

~$ rfkill list
0: hci0: Bluetooth
Soft blocked: no
Hard blocked: no
1: phy0: Wireless LAN
Soft blocked: no
Hard blocked: yes

ショートカットキーで有効にすると、上記の赤字部分が、それぞれ"無効"→""、"yes"→"no"に変わる。

2014年4月15日火曜日

【和訳】Cmakeのチュートリアル


Below is a step-by-step tutorial covering common build system issues that CMake helps to address. Many of these topics have been introduced in Mastering CMake as separate issues but seeing how they all work together in an example project can be very helpful. This tutorial can be found in the Tests/Tutorial directory of the CMake source code tree. Each step has its own subdirectory containing a complete copy of the tutorial for that step.

A Basic Starting Point (Step 1)

最も基本的なプロジェクトは、ソースファイルからの実行ファイルのビルドです。シンプルなプロジェクトでは、2行あるだけのCMakeistsファイルが必要な全てです。
いろいろと追記する前の最初期のCMakeListsは以下のとおりです。
#CMake version2.6以降をサポート
cmake_minimum_required (VERSION 2.6)

#プロジェクト名 Tutorial
project (Tutorial)

#実行ファイル"Tutorial"をソースファイル"tutorial.cxx"から作る
add_executable(Tutorial tutorial.cxx)
この例で、CMakeListsには大文字・小文字が混在しています。CMakeは混在を大文字・小文字を区別しません。
ソースコードtutorial.cxx"は、数字の平方根を計算しますが、現状では下記の通りとてもシンプルです。
// A simple program that computes the square root of a number
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main (int argc, char *argv[])
{
  if (argc < 2)
    {
    fprintf(stdout,"Usage: %s number\n",argv[0]);
    return 1;
    }
  double inputValue = atof(argv[1]);
  double outputValue = sqrt(inputValue);
  fprintf(stdout,"The square root of %g is %g\n",
          inputValue, outputValue);
  return 0;
}

Adding a Version Number and Configured Header File

最初に、実行ファイルとプロジェクトにバージョン番号を導入します。従来通りソースコードのみで管理も出来ますが、CMakeLists内で行うこと事でより高い柔軟性を得られます。バージョン番号を追加するために、CMakeListsを以下の通り修正します。
cmake_minimum_required (VERSION 2.6)
project (Tutorial)
# The version number.
set (Tutorial_VERSION_MAJOR 1)
set (Tutorial_VERSION_MINOR 0)
 
# TutorialConfig.h.inを元にTutorialConfig.hを自動生成する
configure_file (
  "${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"
  "${PROJECT_BINARY_DIR}/TutorialConfig.h"
  )
 
# TutorialConfig.hの出力先のディレクトリを、インクルードファイルの検索パスリストに追加
include_directories("${PROJECT_BINARY_DIR}")
 
# add the executable
add_executable(Tutorial tutorial.cxx)
"${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"を以下の通り作成
// the configured options and settings for Tutorial
#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@
CMakeヘッダファイルを構成する時、@Tutorial_VERSION_MAJOR@と@Tutorial_VERSION_MINOR@の値はCMakeListsで定義される値に置換されます。
次に、tutorial.cxxを、生成されたヘッダファイルをインクルードし、バージョン番号を使用するように修正します。
// A simple program that computes the square root of a number
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "TutorialConfig.h"
 
int main (int argc, char *argv[])
{
  if (argc < 2)
    {
    fprintf(stdout,"%s Version %d.%d\n",
            argv[0],
            Tutorial_VERSION_MAJOR,
            Tutorial_VERSION_MINOR);
    fprintf(stdout,"Usage: %s number\n",argv[0]);
    return 1;
    }
  double inputValue = atof(argv[1]);
  double outputValue = sqrt(inputValue);
  fprintf(stdout,"The square root of %g is %g\n",
          inputValue, outputValue);
  return 0;
}

Adding a Library (Step 2)
ライブラリをプロジェクトに追加します。. ライブラリはユーザ独自の実装を含み、実行ファイルはコンパイラが標準で提供するライブラリ代わりに、このライブラリを使用します。ここでは、ライブラリをサブディレクトリ"subdirectory"に置きます。次の1行をCMakeListsに追加します。
add_library(MathFunctions mysqrt.cxx)
"mysqrt.cxx"はライブラリに含まれる関数のソースファイルです。
ライブラリを使用するために、TOP階層のCMakeListsにadd_subdirectoryを追記します。これで、ライブラリもビルド対象になります。
また、 MathFunctions/mysqrt.hを見つけられるように、インクリード・ディレクトリに追加を行います。
最後に、ライブラリを実行ファイル"Tutorial"に追加します。
include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")
add_subdirectory (MathFunctions) 
 
# add the executable
add_executable (Tutorial tutorial.cxx)
target_link_libraries (Tutorial MathFunctions)
MathFunctionライブラリの作成を考えるケースがあります。巨大なライブラリや、3rdパーティのコードを使いたい場合です。
トップ階層のCMakeListsにオプションを追加します。
# should we use our own math functions?
option (USE_MYMATH 
        "Use tutorial provided math implementation" ON) 
上記で記述したメッセージは、CMake時、GUIに表示されます。デフォルト値はONですが、ユーザは必要に応じて変更出来ます。設定値はキャッシュされ、CMakeするごとに設定を繰り返す必要はありません。
次の変更は、MathFunctionsライブラリのビルド・リンク条件を作成することです。トップ階層のCMakeListsの文末を変更します。
# add the MathFunctions library?
#
if (USE_MYMATH)
  include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")
  add_subdirectory (MathFunctions)
  set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)
endif (USE_MYMATH)
 
# add the executable
add_executable (Tutorial tutorial.cxx)
target_link_libraries (Tutorial  ${EXTRA_LIBS})
MathFunctionsがこのプロジェクトに含まれるかどうかはオプションUSE_MYMATHの設定で決定されます。EXTRA_LIBS変数に実行ファイルにリンクされるライブラリをまとめていることに注意してください。 これは、多くのオプションコンポーネントを抱える巨大なプロジェクトを管理する時のセオリーです。
オプションUSE_MYMATHの設定をソースコードで使用するには以下のようにします。
// A simple program that computes the square root of a number
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "TutorialConfig.h"
#ifdef USE_MYMATH
#include "MathFunctions.h"
#endif
 
int main (int argc, char *argv[])
{
  if (argc < 2)
    {
    fprintf(stdout,"%s Version %d.%d\n", argv[0],
            Tutorial_VERSION_MAJOR,
            Tutorial_VERSION_MINOR);
    fprintf(stdout,"Usage: %s number\n",argv[0]);
    return 1;
    }
 
  double inputValue = atof(argv[1]);
 
#ifdef USE_MYMATH
  double outputValue = mysqrt(inputValue);
#else
  double outputValue = sqrt(inputValue);
#endif
 
  fprintf(stdout,"The square root of %g is %g\n",
          inputValue, outputValue);
  return 0;
}
マクロUSE_MYMATHは、CMakeからソースコードへTutorialConfig.h.in構成ファイルを通して提供します。
TutorialConfig.h.inに以下を記述すると、USE_MYMATHオプションがONの場合のみ、TutorialConfig.h内で#defineされます。
#cmakedefine USE_MYMATH

Installing and Testing (Step 3)
インストール・ルールとテスト機能のサポートをプロジェクトに追加します。
インストールルール:
MathFunctionsライブラリについて、インストールされるライブラリとヘッダーファイルのセットアップを行います。
これには、以下の2行をMathFunctionsのCMakeListsに追加します。 
install (TARGETS MathFunctions DESTINATION bin)
install (FILES MathFunctions.h DESTINATION include)
アプリケーションについて、トップ階層のCMakeListsへ以下を追記します。これは、実行ファイルと出力ヘッダーファイルのインストールを指示します。
# add the install targets
install (TARGETS Tutorial DESTINATION bin)
install (FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h"        
         DESTINATION include)
以上です。この時点でチュートリアルのビルドが可能です。"make install"もしくは「IDEでINSTALLターゲットのビルドの実行」を行うことで、適切なヘッダーファイル、ライブラリ、実行ファイルがインストールされます。CMake変数の"CMAKE_INSTALL_PREFIX"は、インストールされるファイルのルートの決定に使用されます。 
テストの追加:
トップ階層のCMakeListsの文末に、アプリケーションの正常動作を検証する幾つかの基本テストを追加することができます。
# does the application run
add_test (TutorialRuns Tutorial 25)
 
# does it sqrt of 25
add_test (TutorialComp25 Tutorial 25)
 
set_tests_properties (TutorialComp25 
  PROPERTIES PASS_REGULAR_EXPRESSION "25 is 5")
 
# does it handle negative numbers
add_test (TutorialNegative Tutorial -25)
set_tests_properties (TutorialNegative
  PROPERTIES PASS_REGULAR_EXPRESSION "-25 is 0")
 
# does it handle small numbers
add_test (TutorialSmall Tutorial 0.0001)
set_tests_properties (TutorialSmall
  PROPERTIES PASS_REGULAR_EXPRESSION "0.0001 is 0.01")
 
# does the usage message work?
add_test (TutorialUsage Tutorial)
set_tests_properties (TutorialUsage
  PROPERTIES 
  PASS_REGULAR_EXPRESSION "Usage:.*number")
最初のテストは単純にアプリケーション実行を検証します。セグメンテーション違反(segfault)もしくは他のクラッシュは起こらず、0を返します。これがCTestテストの基本形です。続く幾つかのテストの全ては、テスト出力が特定の文字列を含むか検証する、PASS_REGULAR_EXPRESSIONテストプロパティを利用します(make use of)。
このケースでは、数値がふさわしいかの検証と、引数の数が不正な場合のUSAGEメッセージの出力チェックを行います。
入力値の異なる多くのテストを追加したい場合、マクロを作る事も可能です。第1引数にマクロ名、第2引数以降にマクロのパラメータを指定します。
#define a macro to simplify adding tests, then use it
macro (do_test arg result)
  add_test (TutorialComp${arg} Tutorial ${arg})
  set_tests_properties (TutorialComp${arg}
    PROPERTIES PASS_REGULAR_EXPRESSION ${result})
endmacro (do_test)
 
# do a bunch of result based tests
do_test (25 "25 is 5")
do_test (-25 "-25 is 0")
それぞれのdo_testマクロの発動すると、引数に基づいた名称・入力値・結果を使ったテストがプロジェクトに追加されます。

Adding System Introspection (Step 4)
ターゲット・プラットフォームが持っていない可能性がある機能に依存したコードをプロジェクトに追加する場合を考えます。サンプルでは、"log"や"exp"関数を必要とするコードを追加し、プラットフォームがそれらをサポートする場合はそれを使用します。最初にこれらの関数が機能するかをCheckFunctionExists.cmakeマクロでテストします。これには、トップ階層のCmakeListsに追記します。
# does this system provide the log and exp functions?
#"CheckFunctionExists.cmake"をインクルードして実行する
include (CheckFunctionExists.cmake)
check_function_exists (log HAVE_LOG)
check_function_exists (exp HAVE_EXP)
CMakeがプラットフォーム上にそれらを見つけたかを示す値を定義する為にTutorialConfig.h.inを編集します。
// does the platform provide exp and log functions?
#cmakedefine HAVE_LOG
#cmakedefine HAVE_EXP
テストが実施されるのはTutorialConfig.hのconfigure_fileコマンドより前であることは重要です。configure_fileコマンドは、Cmakeの現在の設定を使用して即座にファイルを形成します。
テストに成功した場合はマクロ(HAVE_LOG, HAVE_EXP)が定義されるのでこれを使用してコードを分岐させることが出来ます。
// if we have both log and exp then use them
#if defined (HAVE_LOG) && defined (HAVE_EXP)
  result = exp(log(x)*0.5);
#else // otherwise use an iterative approach
  . . .

Adding a Generated File and Generator (Step 5)
生成したソースファイルをビルドプロセスに追加する方法を説明します。このサンプルにおいて、ビルドプロセスでテーブルを作成し、そのテーブルをアプリケーション内にコンパイルします。まず、テーブルを作成するプログラムを用意します。
MathFunctionsサブディレクトリで、"MakeTable.cxx"を新規作成します。
// A simple program that builds a sqrt table 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main (int argc, char *argv[])
{
  int i;
  double result;
 
  // make sure we have enough arguments
  if (argc < 2)
    {
    return 1;
    }
  
  // open the output file
  FILE *fout = fopen(argv[1],"w");
  if (!fout)
    {
    return 1;
    }
  
  // create a source file with a table of square roots
  fprintf(fout,"double sqrtTable[] = {\n");
  for (i = 0; i < 10; ++i)
    {
    result = sqrt(static_cast<double>(i));
    fprintf(fout,"%g,\n",result);
    }
 
  // close the table with a zero
  fprintf(fout,"0};\n");
  fclose(fout);
  return 0;
}
テーブルはC++のコードで生成され、出力ファイルは実行時の引数で指定します。
MathFunctionsのCMakeListsに、実行ファイルMakeTableをビルドするコマンドを追加し、ビルドプロセスの一部としてMakeTableを実行します。
# テーブルを生成する実行ファイル"MakeTable"を追加
add_executable(MakeTable MakeTable.cxx)
 
# ソースコードを生成するコマンドを追加
add_custom_command (
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Table.h
  COMMAND MakeTable ${CMAKE_CURRENT_BINARY_DIR}/Table.h
  DEPENDS MakeTable
  )
 
# 生成したソースコードのパスをインクルードファイルの検索パスに追加 
include_directories( ${CMAKE_CURRENT_BINARY_DIR} )
 
# メインライブラリ"MathFunctions"に追加
add_library(MathFunctions mysqrt.cxx ${CMAKE_CURRENT_BINARY_DIR}/Table.h  )
最初に、MakeTableの実行ファイルを、他の実行ファイルの場合と同様に、追加します。
それから、MakeTableの実行からTable.hを作る方法を詳述するカスタム・コマンドを追加します。
次に、mysqrt.cxxが、生成されるファイル"Table.h"に依存することをCMakeに知らせる必要があります。Table.hをライブラリMathFunctionsのソースリストに追加します。mysqrt.cxxがTable.hを見つけてインクルード出来るように、Table.hのパスをインクルード・ディレクトリのリストに追加する必要もあります。
このプロジェクトのビルド時、MakeTable実行ファイルを最初にビルドします。次に、Table.hを生成するためにMakeTableを実行します。最後に、mysqrt.cxxをコンパイルします。このmysqrt.cxxはMathFunctionsライブラリを生成するTable.hを含んでいます。
以上の修正を盛り込んだトップ階層のCMakeListsは下記のとおりです。
cmake_minimum_required (VERSION 2.6)
project (Tutorial)
 
# The version number.
set (Tutorial_VERSION_MAJOR 1)
set (Tutorial_VERSION_MINOR 0)
 
# does this system provide the log and exp functions?
include (${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake)
 
check_function_exists (log HAVE_LOG)
check_function_exists (exp HAVE_EXP)
 
# should we use our own math functions
option(USE_MYMATH 
  "Use tutorial provided math implementation" ON)
 
# configure a header file to pass some of the CMake settings
# to the source code
configure_file (
  "${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"
  "${PROJECT_BINARY_DIR}/TutorialConfig.h"
  )
 
# add the binary tree to the search path for include files
# so that we will find TutorialConfig.h
include_directories ("${PROJECT_BINARY_DIR}")
 
# add the MathFunctions library?
if (USE_MYMATH)
  include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")
  add_subdirectory (MathFunctions)
  set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)
endif (USE_MYMATH)
 
# add the executable
add_executable (Tutorial tutorial.cxx)
target_link_libraries (Tutorial  ${EXTRA_LIBS})
 
# add the install targets
# TARGETSに続く"Tutorial"を名前とする実行ファイルを、binディレクトリ以下に作成する
install (TARGETS Tutorial DESTINATION bin)
# "Tutorial"を名前とする実行ファイルを、binディレクトリ以下に作成する
# FILESに続くファイルのパス(複数のコピー)を、DESTINATIONに続く"include"ディレクトリにコピーする
install (FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h" DESTINATION include) # does the application run add_test (TutorialRuns Tutorial 25) # does the usage message work? add_test (TutorialUsage Tutorial) set_tests_properties (TutorialUsage PROPERTIES PASS_REGULAR_EXPRESSION "Usage:.*number" ) #define a macro to simplify adding tests macro (do_test arg result) add_test (TutorialComp${arg} Tutorial ${arg}) set_tests_properties (TutorialComp${arg} PROPERTIES PASS_REGULAR_EXPRESSION ${result} ) endmacro (do_test) # do a bunch of result based tests do_test (4 "4 is 2") do_test (9 "9 is 3") do_test (5 "5 is 2.236") do_test (7 "7 is 2.645") do_test (25 "25 is 5") do_test (-25 "-25 is 0") do_test (0.0001 "0.0001 is 0.01")
TutorialConfig.h looks like:
// the configured options and settings for Tutorial
#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@
#cmakedefine USE_MYMATH
 
// does the platform provide exp and log functions?
#cmakedefine HAVE_LOG
#cmakedefine HAVE_EXP
And the CMakeLists file for MathFunctions looks like:
# first we add the executable that generates the table
add_executable(MakeTable MakeTable.cxx)
# add the command to generate the source code
add_custom_command (
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Table.h
  DEPENDS MakeTable
  COMMAND MakeTable ${CMAKE_CURRENT_BINARY_DIR}/Table.h
  )
# add the binary tree directory to the search path 
# for include files
include_directories( ${CMAKE_CURRENT_BINARY_DIR} )
 
# add the main library
add_library(MathFunctions mysqrt.cxx ${CMAKE_CURRENT_BINARY_DIR}/Table.h)
 
install (TARGETS MathFunctions DESTINATION bin)
install (FILES MathFunctions.h DESTINATION include)

Building an Installer (Step 6)
プロジェクトを一般に配布する事を考えます。様々なプラットフォームに対して、バイナリとソースの双方を配布するには、前述のStep3「Installing and Testing」で行ったインストール(ソースコードからビルドしてインストール)とは若干の違いが存在します。
このサンプルでは、インストールパッケージをビルドしますが、バイナリインストールと、cygwin, debian, RPMs等で見られるようなパッケージ管理システム機能をサポートします。
プラットフォーム固有のインストーラを作るために、"Packing with CPack"チャプターで記述されている通り、CPackを使用します。
トップ階層のCMakeLists.txtに追記します。
# build a CPack driven installer package
include (InstallRequiredSystemLibraries)
set (CPACK_RESOURCE_FILE_LICENSE  
     "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")
set (CPACK_PACKAGE_VERSION_MAJOR "${Tutorial_VERSION_MAJOR}")
set (CPACK_PACKAGE_VERSION_MINOR "${Tutorial_VERSION_MINOR}")
include (CPack)
以上で達成出来ます。.
"InstallRequiredSystemLibraries"のインストールから開始します。このモジュールはランタイムライブラリをインクルードします。ランタイムライブラリは、現在のプラットフォームに対してプロジェクトが必要とします。
次に、ライセンスを置いた場所と、プロジェクトのバージョン情報を示すCPack変数をセットします。
最後に、CPackモジュールをインクルードします。CPackモジュールは、定義した変数や、他のインストーラの対象となるシステムのプロパティを使用します。
通常の手順でプロジェクトをビルドを行い、その上で絵CPackを実行します。バイナリで配布する場合は以下となります。
cpack -C CPackConfig.cmake
ソースファイルで配布する場合は以下となります。
cpack -C CPackSourceConfig.cmake

Adding Support for a Dashboard (Step 7)
ダッシュボードへテスト結果の投稿をサポートする機能は、容易に追加出来ます。このチュートリアルの以前に、既に幾つかのテストをプロジェクトに定義しています。これらのテストを実行し、結果をダッシュボードに投稿します。ダッシュボードのサポートをインクルードするために、TOP階層のCMakeListsにCTestモジュールをインクルードします。
# enable dashboard scripting
include (CTest)
また、CTestConfig.cmakeファイルを作成します。これに、ダッシュボードに対してプロジェクト名を記述します。
set (CTEST_PROJECT_NAME "Tutorial")
CTestは実行時、このファイルを読み取ります。シンプルなダッシュボードを作成するためには、プロジェクトでCMakeを実行し、ディレクトリを生成ファイルの出力先に変更し、"ctest –D Experimental"を実行します。ダッシュボードの結果は、Kitwareの公式ダッシュボードにアップロードされます。

2014年4月7日月曜日

i300SAにLinux用Wifiドライバをインストール

NextGear i300SA(中身はclevo w110er)に入れたUbuntu13.10からWifiに繋がらない。
アクセスポイントは見えていて、WPA認証しても接続に失敗する。
偶に接続状態になっても、実際のデータ通信は行われない。(ゲートウェイへpingを打っても戻ってこない)
かと思うと、ふとした拍子に正常に通信を始めることがある。
Windos7でブートした時は問題なく通信していてハードウェアは正常に見えるので、
ドライバが中途半端に動作しているのでは?と推測する。

PCIバス上のデバイス

$ lspci
【中略】
03:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8723AE PCIe Wireless Network Adapter
【後略】

$ lspci -vnns 03:00.0
03:00.0 Network controller [0280]: Realtek Semiconductor Co., Ltd. RTL8723AE PCIe Wireless Network Adapter [10ec:8723]
Subsystem: Realtek Semiconductor Co., Ltd. Device [10ec:0726]
Flags: bus master, fast devsel, latency 0, IRQ 18
I/O ports at d000 [size=256]
Memory at f7900000 (64-bit, non-prefetchable) [size=16K]
Capabilities: <access denied>
Kernel driver in use: rtl8723ae

$ sudo lshw -C network -numeric
  *-network               
       詳細: 無線インターフェース
       製品: RTL8723AE PCIe Wireless Network Adapter [10EC:8723]
       ベンダー: Realtek Semiconductor Co., Ltd. [10EC]
       物理ID: 0
       バス情報: pci@0000:03:00.0
       logical name: wlan0
       バージョン: 00
       シリアル: 2c:d0:5a:61:52:ad
       幅: 64 bits
       クロック: 33MHz
       capabilities: pm msi pciexpress bus_master cap_list __________________ physical wireless
       設定: broadcast=yes driver=rtl8723ae driverversion=3.11.0-18-generic firmware=N/A ip=192.168.0.4 latency=0 link=yes multicast=yes wireless=IEEE 802.11bgn
       リソース: irq:18 ioport:d000(size=256) メモリー:f7900000-f7903fff

10ecはベンダID、 8723はプロダクトIDらしい。
rtl8723aeというドライバが機能していない可能性が高い。

$ udevadm info -a -p /sys/class/net/wlan0 | grep DRIVER
    DRIVER==""
    DRIVERS=="rtl8723ae"
    DRIVERS=="pcieport"
    DRIVERS==""

カーネルに登録されているドライバ情報を確認する

$ modinfo rtl8723ae
filename:       /lib/modules/3.11.0-18-generic/kernel/drivers/net/wireless/rtlwifi/rtl8723ae/rtl8723ae.ko
firmware:       rtlwifi/rtl8723fw_B.bin
firmware:       rtlwifi/rtl8723fw.bin
description:    Realtek 8723E 802.11n PCI wireless
license:        GPL
author:         Larry Finger <Larry.Finger@lwfinger.net>
author:         Realtek WlanFAE <wlanfae@realtek.com>
author:         lizhaoming <chaoming_li@realsil.com.cn>
srcversion:     B27D28DF892890255CCDDBE
alias:          pci:v000010ECd00008723sv*sd*bc*sc*i*
depends:        rtlwifi,rtl_pci,mac80211
intree:         Y
vermagic:       3.11.0-18-generic SMP mod_unload modversions 
parm:           swenc:Set to 1 for software crypto (default 0)
 (bool)
parm:           ips:Set to 0 to not use link power save (default 1)
 (bool)
parm:           swlps:Set to 1 to use SW control power save (default 0)
 (bool)
parm:           fwlps:Set to 1 to use FW control power save (default 1)
 (bool)
parm:           debug:Set debug level (0-5) (default 0) (int)


ドライバ名をキーワードに検索すると、askubuntu.comに以下の投稿が見つかった。
"Wireless card Realtek RTL8723AE-BT is not recognized"
  • ndiswrapperを試しても上手く行かない
  • Realtek社から非公式ながら"92シリーズ"なるドライバ(ソースコード・ファームウェア)を公開している
  • 何故かwebではなくDropboxで公開している
version 0006.0514.2012 のtarballをダウンロード


MD5チェックを行った後に解凍

$ echo fd10e9a347c6447f649324d6bdab53de rtl_92ce_92se_92de_8723ae_linux_mac80211_0006.0514.2012.tar.gz > md5check.txt 
$ md5sum --check md5check.txt rtl_92ce_92se_92de_8723ae_linux_mac80211_0006.0514.2012.tar.gz: OK
$ rm md5check.txt 
$ tar zxvf rtl_92ce_92se_92de_8723ae_linux_mac80211_0006.0514.2012.tar.gz

必要なツールをインストール

$ sudo apt-get install build-essential linux-headers-generic linux-headers-`uname -r`

makeを行うと、"error: ‘struct ieee80211_conf’ has no member named ‘channel’"とメッセージを表示して失敗する。
下記の投稿によると、13.10ではヘッダファイルの構成が変わった為らしい。

上記URLで紹介されているドライバを試したところ、上手くいっている、ように見える。

2014年4月3日木曜日

Windowsの共有フォルダにLinuxからアクセスする

Windows側 : Windows XP 32bit
Linux側 : Ubuntu 13.04 64bit

  1. Windowsに、あらかじめ共有フォルダを作っておく。(※1)
  2. WindowsマシンのIPアドレス(※2)とワークグループ名をメモしておく
  3. Linuxにsambaをインストール
  4. /etc/samba/smb.confをオープンし、以下の編集を行う
    workgroup = {Windowsのワークグループ名}
  5. Ubuntuで、「場所 > ネットワーク > サーバーへ接続」を選択し、以下のアドレスを入力
    smb://{WindwosのIPアドレス}
  6. 「Windowsネットワークフォルダ > Windowsマシン名 > 共有フォルダ」が見える筈

※1 共有ドキュメントは対象外らしい。
※2 ipconfigコマンドを使用

余談ではあるが、プラネックスコミュニケーションズのUSB無線LANアダプタは、サポート外ながらLinux用ドライバを提供している。素晴らしい。

2014年3月13日木曜日

Qtにおけるビルドファイルの出力先

Qtのmakeファイルの出力先は、プロジェクトモードにして、ビルドディレクトリ欄に記述する。
Debug/Releaseそれぞれについて指定する必要がある。
("ビルド構成を編集"のリストボックスで選択可能)


BBBでQtアプリの自動起動

目的

Qtを使用してBBB上でGUIアプリを動作させる。
GUIアプリではKeyPressEventを使用してキーボードの入力値を取得している
GUIアプリはBBBの電源投入で自動起動させる

環境

BeagleBoneBlack + AngStrom(3.8) + Qt(5.1)
# uname -a
Linux beaglebone 3.8.13 #1 SMP Wed Aug 14 16:25:00 CEST 2013 armv7l GNU/Linux

Qt Window Systemを使用する為、XServerを無効化しておく。

BOOT時にXServerを無効化してCUIモードで起動する
# systemctl disable gdm.service

XServerはsystemdで管理されているので、GUIモード中にCUIモードにしたい場合
# systemctl stop gdm.service

Xserverをまた立ち上げたい場合
# systemctl enable gdm.service

オートログイン化の為に、以下のサービスを編集している。
/etc/systemd/system/getty.target.wants/serial-getty@tty1.service
#ExecStart=-/sbin/agetty --noclear %I 38400 linux
ExecStart=-/sbin/agetty -a root %I 38400 linux

試行

【1】telnetでログインしてQt-GUIアプリを起動

・ウィンドウ生成 成功
・ログファイル出力 成功
・仮想キーボード・LCD4ボタン共に反応せず


【2】BOOT1時のsystemdによる自動起動

・ウィンドウ生成 成功
・ログファイル出力 成功
・仮想キーボード・LCD4ボタン共に反応せず
・init.dによる起動も試みたが同様

【3】USBキーボードを接続してログイン、Qt-GUIアプリを手動起動

・ウィンドウ生成 成功
・ログファイル出力 成功
 仮想キーボード・LCD4ボタン共に反応せず

考察

BBBに直ログインした場合、端末名はtty1。
telnetでログインした場合、端末名はttyO0。
systemdで自動起動した場合、端末名は"?"("ps ax"コマンドで確認)
tty1からアプリを起動しないとキーボードを取得出来ないらしい。
systemdによる起動は、ログインプロンプトに先駆けて行われるので端末と結び付けられていない。
なのでログイン後にアプリを自動起動する必要があるが、.bashrcや.bash_profileはAngstromでは機能しない。

対策

ログインプロンプトはsystemdによって管理されるサービスによって実行され、コマンドはagettyが使用される。
agettyは、ログインの方法に標準の"/bin/login"の代わりに独自のプログラムをroot権限で実行する"-l"オプションが存在する。
これを利用して、アプリの起動→終了後に/bin/loginを実行するスクリプトをagettyから読み出す。

/etc/systemd/system/getty.target.wants/serial-getty@tty1.service
[Service]
ExecStart=-/sbin/agetty -l /home/root/MyApp.sh -a root %I 38400 linux

/home/root/MyApp.sh
#!/bin/bash

/home/root/MyApp -qws
/bin/login root

参考文献

man of agetty
Linux起動の仕組みを理解しよう[rcスクリプト編]
Automatic login on Angstrom Linux
Systemd入門(1) - Unitの概念を理解する
自作プログラムをデーモンとして起動させる(by init.d)
systemdの*.serviceファイルの書き方

Create Startup Script in Angstrom
Automatic login on Angstrom Linux

BeagleBone Black(Angstrom)にSSHで入れるようにする

Qt4 自前のsignalの作り方
Qt Events

.bashrc と .bash_profile 結局どっちを使えばいい?

2014年3月10日月曜日

【Linux】他のユーザをログアウト

Telnet(ttyO1)からログインして、直接続(tty1)にログインしているユーザをキックする。

who
 01:16:23 up  1:16,  2 users,  load average: 0.10, 0.08, 0.05
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
root     ttyO0     00:06    7.00s  0.22s  0.04s w
root     tty1      00:07    1:08m  0.64s  0.57s ./ViEditView -qws

tty1が関わるプロセスを表示する

ps ax | grep tty1
  185 tty1     Ss     0:00 /bin/login --                 
  410 tty1     S      0:00 -sh
  411 tty1     S+     0:00 ./ViEditView -qws
  443 ttyO0    S+     0:00 grep tty1

ここで、tty1のログインに関わるプロセスIDは410。これにkillシグナルを送る

kill -9 410

再度whoコマンドを実行し、tty1ユーザがいなくなっている事を確認する

who
root     ttyO0        Jan  1 00:06

■参考文献
不要なユーザを強制ログアウトさせる
【 kill 】 プロセスおよびジョブを強制終了する
【 who 】 現在ログインしているユーザーを表示する

2014年2月23日日曜日

Update Ubuntu; 12.04(32bit) → 13.10(64bit)

13.10のインストールディスクを作り、12.04の領域にクリーンインストール。

~$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=13.10
DISTRIB_CODENAME=saucy
DISTRIB_DESCRIPTION="Ubuntu 13.10"
~$ uname -a
Linux xxxxxxx 3.11.0-17-generic #31-Ubuntu SMP Mon Feb 3 21:52:43 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

無事にバージョンが上がっている事を確認。
以下、気付いた事

・ブートローダ
12.04ではWindowsのブートローダでLinuxを選択するとgrubが起動して、そこからUbuntuを再度選ぶという二度手間だったが、13.10ではgrubが先に起動し、結果的に一発で起動するようになった。
Windowsのブートローダの方が融通が利かないがトラブル対策で先に起動していたが、当面はこれで良い事とする。

・日本語入力出来ない
12.04ではWindowsと同様に「半角/全角」でASCIIと日本語が切り替えらたが、13.10では反応しない。ツールバーのそれらしいアイコンをクリックして"Anthy"を選択すると出来るようになるが、Anthyは数年前に開発が終了しているらしいので使用したくない。

調べてみると、従来は「半角/全角」で文章入力方式を管理するIBusをON/OFFし、それでASCII・日本語を切り替えていたが、現在はIBusは常時ONに代わり、結果として「半角/全角」が機能していない。
代わりにIBusに入力ソース(英語、Anthyによる日本語、ATOKによる日本語、etc.)等を設定し、それを「ソースの切り替え」に登録したキー入力で切り替える必要がある。
試したところ、「ソースの切り替え」に「Zenkaku Hankaku」や「Super+Space」は登録出来るものの機能しない(SuperはいわゆるWindowsキー)。バグらしい。
入力ソースにはMozc(ibus-mozc)をインストールして「テキスト入力」ダイアログ左下の「+」アイコンから入力ソースに追加、、ソース切り替えは「Command+Space」で事無きを得た。
スクリーンショットの「日本語」は、"日本語キーボードのASCII入力"の事。「英語(US)」にすると英語圏のキーボード配列になる。
mozc単体で「全角/半角」によりASCIIと日本語を切り替えてくれるので、「Command+Space」を使うことは無さそうだ。

参考文献

日本語入力をラクにする Mozc
Ubuntu 13.10と日本語入力

2014年2月21日金曜日

BBBの電源を切るときは

POWERボタンを押すとシャットダウンシーケンスに入る。
電源ケーブルぶち切りは止めよう。

BBBのブートイメージを変更する

元ネタ

Beagleboard:Updating_The_Software

Beagleboard上のeMMCをflash

4GB以上のuSDカードが必要

イメージファイル""をダウンロード
BBB-eMMC-flasher-2013.09.04.img.xz

このファイルはeMMCをフラッシュする"eMMC flasher"であり、uSDカードからbootするものでは無い事に注意する事

現在のバージョンでは、uSDカードをOS起動中に外部ストレージに追加可能。

1) DLしたflash-image-fileを解凍
2) Win32DiskImager(for Windows)を使って解凍したflash-image-fileをuSDカードにコピー。
   Win32DiskImagerは以下からDL可能
   https://wiki.ubuntu.com/Win32DiskImager
3) コピーが完了したら、BBにuSDカードを挿入(※LANケーブル及びUSBデバイスは抜いておくこと)
4) S2ボタン(Boot Switch)を押し続けた状態でBBに電源を投入。
   S2ボタンはUSER-LEDのどれかが点滅するまで押し続ける
5) eMMCのflashが始まるとUSER-LEDが点滅を始める。全てのLEDが点灯したらflash完了
6) uSDカードを抜いて電源を切り、今度はS2ボタンを押さずに電源再投入。正常にBootする事を確認

uSDからBoot

uSDカードから直接Boot出来るイメージが定期的に提供される

※強制的にuSDカードからBootさせるには、eMMC上のFATパーテーションにある
 MLOファイルを削除する。
 ここには、BBをUSBケーブルでPCに接続し、thumbdriveとする事でアクセスできる。

4GB上のuSDカードが必要。

イメージファイルをダウンロード
Angstrom-Cloud9-IDE-GNOME-eglibc-ipk-v2012.12-beaglebone-2013.08.21.img.xz

Win32DiskImagerでuSDカードにコピー。

BBにカードを挿入し、そのまま電源を投入すればuSDからブートする

BBのeMMCをflashする際、uSDカードのフォーマットが不適当な為にトラブルになる場合があり、
これを避ける為に、DiskImagerを使用する前にHP Format Toolを使用する事を推奨

HP USB Disk Storage Format Tool Ver 2.18

FATもしくはFAT32でフォーマットを行う

2014年2月18日火曜日

i300SAのSSDをMZ-7TE250Bに換装

Windows7とUbuntuのデュアルブート構成を構築した際のメモ。

  1. 最初に、i300SAに付いてくるディスクでWindows7(64bit)をインストール。
    パーテーション領域は120GBに設定
  2. Ubuntu12-04-3をインストール。
    この時、[ディスク領域の割り当て] で[UbuntuをWindows 7とは別にインストール]を選んでしまい、全自動でインストールが行われてしまう。
    Windowsの「システム回復ディスク」でBootLoaderを元に戻した後、「ディスクの管理」ツールでLinux及びスワップ領域を削除。
    その後、再度Ubuntuをインストールし、今度は[ディスク領域の割り当て] で [それ以外]を選択。
    スワップ領域は16GBにした結果、作ったパーテーションは以下のようになった。
  3. [それ以外]のUbuntuインストールではブートローダは変更されないのでUbuntuで起動出来ない。そこで、WindowsのブートローダにUbuntuを選択出来るように仕込む
  4. grub4dos-0.4.4.zipをDLし、そこに含まれるgrldrとgrldr.mbrをCドライブ直下(C:\)にコピー
  5. メモ帳で"C:\menu.lst"を作成
    title Linux
    root (hd0,5)
    kernel /boot/grub/core.img
  6. コマンドプロンプトで設定を編集
    C:\Windows\system32>bcdedit /create /d "Linux" /application bootsector
    エントリ {77647cd5-9861-11e3-a329-ee98fbcc180e} は正常に作成されました。
    C:\Windows\system32>bcdedit /set {77647cd5-9861-11e3-a329-ee98fbcc180e} device partition=C:
    この操作を正しく終了しました。
    C:\Windows\system32>bcdedit /set {77647cd5-9861-11e3-a329-ee98fbcc180e} path \grldr.mbr
    この操作を正しく終了しました。
    C:\Windows\system32>bcdedit /displayorder {77647cd5-9861-11e3-a329-ee98fbcc180e} /addlast
    この操作を正しく終了しました。
  7. 設定が正しく反映されている事を確認する
    C:\Windows\system32>bcdedit

    Windows ブート マネージャー
    --------------------------------
    identifier              {bootmgr}
    device                  partition=\Device\HarddiskVolume1
    description             Windows Boot Manager
    locale                  ja-JP
    inherit                 {globalsettings}
    default                 {current}
    resumeobject            {77647cd1-9861-11e3-a329-ee98fbcc180e}
    displayorder            {current}
                            {77647cd5-9861-11e3-a329-ee98fbcc180e}
    toolsdisplayorder       {memdiag}
    timeout                 30

    Windows ブート ローダー
    --------------------------------
    identifier              {current}
    device                  partition=C:
    path                    \Windows\system32\winload.exe
    description             Windows 7
    locale                  ja-JP
    inherit                 {bootloadersettings}
    recoverysequence        {77647cd3-9861-11e3-a329-ee98fbcc180e}
    recoveryenabled         Yes
    osdevice                partition=C:
    systemroot              \Windows
    resumeobject            {77647cd1-9861-11e3-a329-ee98fbcc180e}
    nx                      OptIn

    リアル モード ブート セクター
    --------------------------------
    identifier              {77647cd5-9861-11e3-a329-ee98fbcc180e}
    device                  partition=C:
    path                    \grldr.mbr
    description             Linux

2014年2月10日月曜日

「コンピレーションの一部」チェックボックス


iTunesで、「情報を見る」→「情報」で「コンピレーションの一部」にチェックが入っていると、"Compilations"フォルダに曲データが保存される。このチェックを外すと、自動的に"アルバムアーティスト"フォルダに移動される。全曲移動すれば、"Compilations/[アルバム名]"フォルダも削除される。このチェックを外す操作は、何故かアルバム単位で出来ないので、1曲単位で行う必要がある。

2014年2月5日水曜日

PCからUSB経由で端末上のSDカードにデータ転送する

PCとGalaxyNote3をUSB接続すると、PCからはカメラデバイスとして認識され、任意のファイルを転送出来ません。
初代GalaxyNoteの時はマスストレージとして見えて好き勝手出来たのですが。
どうやら専用ドライバを入れる必要があるらしく、Samsungのサイトからドライバだけインストールしてみたところ、ドライバのインストール自体には成功するものの、デバイスを接続するとINFファイルが無いと言われて相変わらず使えません。
仕方なくSamsungの提供しているツールKiesをインストールするとマスストレージとして見えるようになりました。
接続の際にKiesを立ち上げる必要はありません。

■参考文献
GalaxyNote3でスクリーンショットを撮る方法
SAMSUNG Kies

2014年1月28日火曜日

CmakeでStaticライブラリを作る

Linuxにおいて、.aはStaticライブラリ、.soはSharedライブラリ(≒Dynamic Link)。
CmakeでStaticライブラリを作るには、"-DBUILD_SHARED_LIBS=OFF"をオプションに含める。

2014年1月23日木曜日

OS起動時の環境変数設定

従来のLinuxでは"~/.bash_profile"に記述していたが、最近のUbuntuでは"~/.profile"に設定するらしい。
確かに"~/.bash_profile"は存在せず、"~/.profile"は存在する。
"~/.bash_profile"内で実行された"~/.bashrc"も"~/.profile"から実行されている。


■参考文献
Linux起動時に読みこむスクリプト、環境変数について
Ubuntu 10.04 で .bash_profile でなくて .profile

↓後で読む
Linux起動の仕組みを理解しよう[init/inittab編]

GalaxyNote3を日本語化

こちらのサイトの通りにやったら出来ました。(環境はUbuntu12.04.3 32bit)
引っ掛かったのは次の2点くらいです


"{install_dir}/eclipse"に移動してeclipseコマンドを実行したらJREが足りないと言われたので、公式サイトを参考にapt-getでOpenJDK7-JREをインストール。

PATH変数にadbコマンドのパスを追記
$ export PATH=${インストール先}/sdk/platform-tools:$PATH


あとはIMEを設定して完了。
【設定】→【コントロール】→【言語と文字入力】→【キーボードと入力方法】


■参考文献
Galaxy S4の日本語リソースは入ってます [Galaxy_Report]
 →日本語化の実践例
Setting Up the ADT Bundle
 →Android SDKの配布元
How to download and install prebuilt OpenJDK packages
 →OpenJDKの配布元


GalaxyNote3初期設定

目玉アイコンを消す
目の動きを検出して節電や画面スクリーンを行うスマートスクリーンという機能らしい。
機能している気がしないので消す事にする
【Settings】→【Controls】→【Smart screen】→【Smart stay】

バッテリーの残量をパーセンテージ表示にする
【Settings】→【Device】→【Display】→【Show batery percentage】

コネクタのマージンが狭すぎてSIMが取り外せない
セロテープを使おう

APN選べない
・・・目を凝らすとラジオボタンが薄すぎて見えないだけだった

通信出来ている場合でも、電波強度アイコンが常に圏外表示
データ専用SIMを使用していると、一部の機種ではこのような問題が発生するらしい
root権限を取得すれば解消出来るらしい(SystemUI.apk?)が、取りあえずSignalNotificationのインストールで電波状況が表示できるようになった(常時圏外表示のオリジナルアイコンが残っているのが鬱陶しい)。

CameraZoomFxで設定してもシャッター音が消えない
OS依存の問題なので、rootを取る必要があるとCameraZoomFxのヘルプに書いてあった。
バーストモード(バーストHDはOFF)で撮影すれば1440x1080だけどシャッター音はならないので、屋内ではこれで代用するか。