カテゴリーアーカイブ OS

takahashi 著者:takahashi

mac OSの回復USBディスクを作成する方法

最近、会社のiMacのmac OSが立ち上がらなくなってしまっため、OSの上書きを試みましたが、内臓のリカバリーモードではうまく行きませんでした。
そこで、外部メディアにインストーラーイメージを入れて、外部からリカバリしてみることにしました。

今回の操作を行うには、メディア作成時に正常に起動するMacintoshと約12GB以上の容量を持つ空のUSBメモリが必要になります。
データが入ったUSBメモリも使用できますが、今回の手順を試すとUSBメモリ内の全データが削除されてしまうので注意してください。

手元に正常に稼働するMacintoshが1台しかない方は、緊急時に備えてあらかじめ1本作っておくことをお勧めします。
なお、OSの再インストールに使う際はバージョンをアップグレードするごとに作成する必要があります。

まずはmacOSを起動して、AppStoreから現行のmacOSを探します。
リカバリディスクが作れるのは、AppStoreからダウンロードできるバージョンに限られますので注意してください。

写真は既に入手した後の画面のため、”開く”になっていますが、ダウンロード前に開くと”ダウンロード”というボタンになっているので、クリックします。
ダウンロードが終了すると、アプリケーションフォルダに”macOS Mojaveインストール”が追加されます。

この状態になっていることを確認したらアプリケーションからTerminal.appを開き、次のようにコマンドを入力します。(※この手順を実行するとUSBメモリ内のデータがすべて削除されます)

sudo /Applications/Install\ macOS\ バージョン名(例:mojave).app/Contents/Resources/createinstallmedia --volume /Volumes/インストールメディアにするUSBメモリのデバイス名

コマンドを実行すると、USBへのインストーラーイメージの書き込みが開始されます。
コマンドライン上に進行状況が表示されるので、完了するまで待ちます。

Ready to start.
To continue we need to erase the volume at /Volumes/Install macOS (バージョン名)/.
If you wish to continue type (Y) then press return: Y
Erasing disk: 0%... 10%... 20%... 30%... 100%
Copying to disk: 0%... 10%... 20%... 30%... 40%... 50%... 60%... 70%... 80%... 90%... 100%
Making disk bootable...
Copying boot files...
Install media now available at "/Volumes/Install macOS (バージョン名)"

完了したら、”Install macOS (バージョン名)を取り出す”をクリックしてUSBを取り外し、保管しておきます。

作成したUSBインストールメディアを使用する際は、まずmacOSが起動している場合は一度シャットダウンします。
そのあと、USBを本体に差し込み、

キーボード左下あたりにある”option(alt)キー”を押したまま電源ボタンを押します。

すると、どのディスクからOSを起動するか選択する画面が出てきますので

“Install macOS (バージョン名)”
を選択します。

あとは言語を選べば…

内臓のリカバリーモードと同等の画面が表示されました。
内容もそのままリカバリーモードと同じなので、OSのインストール以外にもディスクチェックやTerminalの起動も行うことができます。

困ったときは是非参考になれば幸いです。

  • この記事いいね! (0)
村上 著者:村上

【Android】「No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel-linux-android」エラーの対処法

タイトルにある通り、Android Studioで発生したエラーの対処法についてです。
エラー文はこちら。

No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel-linux-android

NDKツールチェーンフォルダに必要なファイルが足りないことが原因のようでした。

 

今回エラー解消で参考にさせていただいた投稿はこちらから。

“No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android”・Issues #15・google/filament・GitHub
https://github.com/google/filament/issues/15

この中に、AndroidのDeveloperサイトから、NDKをダウンロードしてきて、それを適切な場所に置く、という対処法があり、こちらを行いました。

まず、下記から自分の環境に対応したパッケージをダウンロードします。

NDK のダウンロード|Android NDK|Android Developers
https://developer.android.com/ndk/downloads/?hl=zh-en


私の場合は、「Windows 64 ビット」のパッケージをインストールしました。
ただ、サイズが 700MB くらいあるので、少し時間がかかります。
ダウンロードが完了したら展開しておきましょう。

次に、Android SDKのある場所を開きます。
私のWindows環境では、C:\Users\[ユーザー名]\AppData\Local\Android\sdk でした。
そこにある ndk-bundle フォルダの中の、さらに toolchains フォルダを開きます。

そのフォルダ内に、mips64el-linux-android-4.9mipsel-linux-android-4.9 が足りていなかったため、ダウンロード・展開をしたファイルからその2つをコピーします。

あとは、Android Studio に戻って、再ビルド(もしくは Try Again)を実行します。
私の場合は、これでビルドが完了しました。

 

以上、「No toolchains found in the NDK toolchains folder for ABI with prefix: mipsel-linux-android」というエラーの対処法でした。
こういう、ファイルが足りない系のエラーって面倒ですね…。
が、何とか解決できてよかったです。
もし同じ状況に陥った場合は、是非参考にしてみてください。

  • この記事いいね! (3)
takahashi 著者:takahashi

Windows10で回復ディスクを作る方法

最近のWindowsは、Windowsが起動していない状態で起動オプションを呼び出すのがデフォルトでできなくなっており、折角回復パーティションをインストールしてあってもWindowsそのものが立ち上がらなくなってしまうと回復オプションにすらアクセスできなくなってしまう可能性があります。

そんなときのために、回復オプションを呼び出すための専用のWindows、Windows RE(Recovery Enviroment)があります。
Windows REを使えば、スタートアップ修復やWindows外からのシステムの修復、初期化の操作などを行うことが可能です。

今回は、Windows上からWindows REが起動できる光学ディスクの作り方を説明します。

まず、スタートメニューを開き、検索欄に”コントロールパネル”と入力します。

コントロールパネルの項目が出てくるので、クリックして開きます。

コントロールパネルを開いたら、右上の検索欄に

バックアップと復元

と入力してエンター。

“バックアップと復元(Windows7)”または”バックアップと復元”の項目をクリックします。


左側の”システム修復ディスクの作成”をクリックします。

するとウィザードが開きます。

ディスクドライブにディスクを入れ、”作成”を押せばWindows REの入った回復ディスクが作られます。

起動するときは、作成したディスクをドライブに入れ、起動オプションでドライブから起動するように指定すれば、Windowsの回復オプションを表示させることができます。

基本的に同じOSのバージョン間であれば使いまわし可能なはずですので、あらかじめ作っておくと便利かもしれません。

  • この記事いいね! (0)
村上 著者:村上

【Corodva】Android端末で実行した時に変更内容が反映されない時の対処法

昨日投稿した 【Android】Create React AppとCorodvaで作成したAndroidアプリにプラグインが追加できない時の対処法 の内容とも少し関わってくるのですが、Create React AppとCorodvaで作成したアプリが、何故かAndroidでだけ変更内容が反映されないという状況に陥ったので、その対処法についてです。
この現状が起こるのはAndroidだけで、BrowserとiOSについては何の問題もなく、変更内容が反映されていて…。
原因が分からず、かなり苦しめられました。

 

さて、解決方法ですが、何てことはなく、単にパッケージもしくはプラットフォームのバージョンが新しすぎたせいでした。
今回、アプリの環境をつくるにあたり、Cordovaのバージョンを 7.1.0 から 8.0.0 にアップデートしたのですが、それが原因のようです。
もしくは、Android自体のバージョンが高すぎたのかもしれませんが…とにかく、バージョンが新しすぎて、Androidのファイルが正しく作られていませんでした。
そのため、cordova buildなどの Cordovaのコマンドが正常に働いていなかったのかもしれませんが…エラーが表示されなかったので、発見がかなり遅くなりました。
バージョンに思い至ったのも偶然だったので、もしかしたらこれ以上に解決まで時間が可能性もあり…ぞっとしませんね。

ということで、Cordovaのバージョンを、以前と同じ 7.1.0 に戻したところ、あっけなく変更箇所がアプリに反映されました。
さらに、昨日紹介したプラグインが正常にインストールされない問題についても、バージョンを下げてプラットフォームを再インストールしたところ、必要なファイルが正常に作成されたため、特に修正する必要もなくインストールに成功しました。
…容易にバージョンを上げないようにしなければ…!

 

以上、Cordovaで変更した内容が反映されないときの対処法でした。
とりあえずは、パッケージのバージョンは容易に上げないようにすべきですね…。
古すぎるのもまずいとは思いますが、新しすぎでも問題のようですので、最新より1つ下のバージョンくらいがちょうどいいのかもしれません。
皆様もバージョンによる不具合には十分お気を付けください。

  • この記事いいね! (0)
村上 著者:村上

【Android】Create React AppとCorodvaで作成したAndroidアプリにプラグインが追加できない時の対処法

長いタイトルですが、本日これが起こったので、自分のための備忘録として対処法をまとめます。

開発環境は、Create React App と Cordovaを使っています。
こちらについては、下記の記事のとおりに作成しましたので、ご参考ください。

Create React App & Cordovaでアプリをつくる環境を整える 2018年4月時点 – Qiita
https://qiita.com/bathtimefish/items/113154e89650b351b5b7

 

さて、本題のプラグインの追加ですが、まず追加したいプラグインは下記の2つです。

・https://github.com/petermetz/cordova-plugin-ibeacon
・https://www.npmjs.com/package/cordova-plugin-bluetooth-serial

が、この2つを追加したところ、cordova build android が動かなくなる状況に…!

エラー文によると、androidディレクトリ以下の ressrc、そして AndroidManifest.xml が何故かつくられていないことが原因でした。
そのため、対処法としてはまず一旦プラグインを削除し、Androidのプラットフォームを削除・再作成を行いました。

で、その時点でビルドを行い、正常にビルドが完了するかを確認しました。
この時点では問題なかったのですが、エクスプローラでファイルを確認してみると、やはり res、src、AndroidManifest.xml がない…。
なので、他のCordovaの環境から、上記ファイルをコピー&ペーストして、package名や、ディレクトリ構造をコピー先の環境に合わせるというアナログな手法を取ってみました。
その後、再度プラグインを入れ直したところ、どうやら正常にインストールできた模様。
そして、最後に再度ビルドを行いましたが、今度は正常に完了しました!
試しに実機を接続して、cordova run androidを実行してみましたが、こちらも正常に実行され、問題なくアプリが起動しました!

 

ということで、凄くアナログな方法ではありますが、この方法で何とか無事にプラグインの導入が完了しました!
…アナログだろうが動けばいいんです…!
もし同じようなヵ所でお困りの方がいらっしゃいましたら、良ければ参考にしてください。

  • この記事いいね! (0)
村上 著者:村上

【Android】画像のExif情報から緯度・経度を取得する方法

先日ご紹介した、写真のExif情報から写真の向きを取得する方法に続き、今回は位置情報を取得する方法についてです。
なお今回も、「ExifInterface」というライブラリを使っています。

ちなみに、以前紹介した写真の向きの取得方法についてはこちらの記事から。

【Android】写真のExif情報から写真の向きを取得する方法
https://cpoint-lab.co.jp/article/201809/【android】写真のexif情報から写真の向きを取得する方法

 

早速ですが、コードはこちら。

// 写真から緯度経度を取得
File f = new File([画像のファイルパス]);
Uri uri = Uri.fromFile(f);
InputStream in = null;
try {
    in = getContentResolver().openInputStream(uri);
    ExifInterface exifInterface = null;
    if (in != null) {
        exifInterface = new ExifInterface(in);
        String latitude = exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE);
        String longitude = exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE);
        String latitudeRef = exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF);
        String longitudeRef = exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF);
        // 緯度経度の値を変換
        Double lat = ExifLatitudeToDegrees(latitudeRef, latitude);
        Double lng = ExifLongitudeToDegrees(longitudeRef, longitude);
    }
} catch (IOException e) {
    e.getStackTrace();
    Log.e("ExifActivity", e.getMessage());
}

取得できた緯度経度は、それぞれ lat変数、lng変数に代入されています。
が、この関数では、緯度経度が度分秒という60進数で表現されています。
そのため、場合によってはこの値を10進数に変換する必要があります。

変換はこちらの関数を使いました。
参考サイトのURLをメモしておくのを忘れてしまいました…。
第一引数に、北緯・南緯、もしくは東経・西経を指定し、第二引数に緯度もしくは経度の値を指定します。
上のコードでは、11行目と12行目でそれぞれ緯度経度を変換しています。

// 60進数を10進数に変換
private double ExifHourMinSecToDegrees(String exifhourminsec) {
    String hourminsec[] = exifhourminsec.split(",",0);
    String hour[] = hourminsec[0].split("/",0);
    String min[] = hourminsec[1].split("/",0);
    String sec[] = hourminsec[2].split("/",0);

    double dhour = (double)Integer.parseInt(hour[0]) / (double)Integer.parseInt(hour[1]);
    double dmin = (double)Integer.parseInt(min[0]) / (double)Integer.parseInt(min[1]);
    double dsec = (double)Integer.parseInt(sec[0]) / (double)Integer.parseInt(sec[1]);
    double degrees = dhour + dmin / 60.0 + dsec / 3600.0;

    return degrees;
}

// 緯度の変換
private double ExifLatitudeToDegrees(String ref, String latitude) {
    return ref.equals("S") ? -1.0 : 1.0 * ExifHourMinSecToDegrees(latitude);
}

// 経度の変換
private double ExifLongitudeToDegrees(String ref, String longitude) {
    return ref.equals("W") ? -1.0 : 1.0 * ExifHourMinSecToDegrees(longitude);
}

 

以上、写真から位置情報を取得する方法でした。
なお、当然ですがExifに位置情報が保存されていなければ取得できません。
その場合は、現在の位置情報を取得するなり、もしくは「位置情報を取得できませんでした」というメッセージを取得するなどの処理を追加するほうが良さそうですね。
このあたりはお好みで実装してください。

  • この記事いいね! (0)
村上 著者:村上

【Android】写真のExif情報から写真の向きを取得する方法

タイトル通り、今回は写真の Exif 情報を取得する方法についてです。
ちなみに Exifとは、デジカメやスマートフォンで撮影した画像データに、撮影条件に関するメタデータを追加して保存できる、画像ファイル形式の規格のことをいいます。
例えば、撮影日時とかカメラの機種、カメラの向きなどが保存されています。

で、AndroidでExifを扱うときには、ExifInterface というサポートライブラリを利用します。

Android Developers Blog: Introducing the ExifInterface Support Library
https://android-developers.googleblog.com/2016/12/introducing-the-exifinterface-support-library.html

 

さて、使い方ですが、まず build.gradle に下記を追加します。

implementation "com.android.support:exifinterface:26.1.0"

追加する場所は dependencies{} の中です。
build.gradle を変更すると、Sync Now というリンクが表示されるので、これをクリックします。
エラーが表示されなければ、無事にライブラリが追加できました。

あとは、Activityにコードを追加してきます。

File f = new File([画像のファイルパス]);
Uri uri = Uri.fromFile(f);
int orientation = 1;
InputStream in = null;
try {
    in = getContentResolver().openInputStream(uri);
    ExifInterface exifInterface = null;
    if (in != null) {
        exifInterface = new ExifInterface(in);
        orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
    }
} catch (IOException e) {
    e.getStackTrace();
    Log.e("ExifActivity", e.getMessage());
} finally {
    if (in != null) {
        try {
            in.close();
        } catch (IOException ignored) {
        }
    }
}

結果は orientation という変数に入ります。
もし正常だったら 1 の値が入りますが、左に90度回転していた場合は 6 が、右に90度回転していた場合は 8 が、180度回転していた場合は 3 が入ります。
これに関しては、下記の記事を参考にしました。

iPhoneからアップロードしたJPEG写真が横向きになる問題(EXIF, Orientation)
https://qiita.com/RichardImaokaJP/items/385beb77eb39243e50a6

 

画像の回転については、以前紹介したこちらの記事を参考にしてください。
【Android】ImageViewの画像を180度回転させる方法
https://cpoint-lab.co.jp/article/201809/【android】imageviewの画像を180度回転させる方法/

 

以上、Exifから画像の向きを取得する方法でした。
次回は、位置情報の取得について説明できたらと思います。

  • この記事いいね! (0)
takahashi 著者:takahashi

SystemdでNode.jsのサーバープログラムをお手軽にデーモン化する方法

以前SoftEtherVPNを手軽にSystemdでデーモン化する方法をご紹介しましたが、実は、最近よく使われるNode.jsで書いたサーバープログラムも、Systemdを使うと簡単にデーモン化できるようです。

centos7で標準のsystemdを使いnode.js製サーバーをデーモン化する – Qiita

Node.jsはjavascriptのサーバーサイド版の言語・実行環境で、ほぼjavascriptと同じ言語を使ってサーバー側の処理を書くことができます。
Node.jsのライブラリにも”forever”というプログラムをデーモン化してくれるライブラリがあるのですが、OS起動時と同時に実行させたりする際はちょっと不安が残ります。

起動時にうまくNode.js製のサーバーをデーモンとして動作させる方法がないか探したところ、なんとSystemdのみで実現できるとのことだったので、実際に試してみました。
nodeのプログラムをsystemdを使ってデーモン化するには、

/etc/systemd/system/デーモン名.service

のような名前でファイルを作り、下記のように設定を書き込みます。

[Unit]
Description=node server #任意の説明
After=syslog.target network.target

[Service]
Type=simple
ExecStart=/usr/bin/node /path/to/Node.jsProgramPath #記法:ExecStart=node.js本体のパス node.js向けに書いたサーバープログラムのパス
WorkingDirectory=/path/to/ #作業ディレクトリの場所(スクリプト実行時にカレントディレクトリになっていて欲しい場所)
KillMode=process
Restart=always
User=centos #node.jsプログラム実行ユーザー
Group=centos #node.jsプログラム実行ユーザー

[Install]
WantedBy=multi-user.target

上記のような内容でファイルを保存したら後はお決まりの

systemctl enable デーモン名
systemctl start デーモン名

これだけでnode.jsのプログラムがデーモン化され、OS起動時の自動起動にも登録されます。

Systemdはファイルの記法がわかりづらくて嫌煙されがちな印象でしたが、いろんなプログラムをいとも簡単にデーモン化できてしまうあたり、もしかするとかなり優秀なのかもしれません…

  • この記事いいね! (0)
村上 著者:村上

【アプリ】写真加工機能を手軽に実装できる「Adobe Creative SDK」

まだAndroidに導入途中なので、詳しい実装方法はご紹介できないのですが、まずはこんな便利なサービスがあるというご紹介まで。

写真にフィルターをかけたり、スタンプを押したりできる無料のSDKが、Adobeから提供されています。
サービス名は、タイトルにある通り「Adobe Creative SDK」です。
公式サイトはこちらから。
Adobe Creative SDK
https://www.adobe.io/apis/creativecloud/creativesdk.html
Androidだけでなく、iOSやWebにも対応しています。
Web版だけは試したことがありますが、とても簡単でした!

なお、こちらの記事も参考になりますので、ぜひご覧ください。
https://qiita.com/84d010m08/items/566415df1914ca097082
https://qiita.com/84d010m08/items/566415df1914ca097082

 

こちらのサービスを使うにはアカウント登録とアプリ登録が必要なので、今回はそちらをご紹介。
まずAdobeアカウントを、Adobeの公式サイト右上のログインから作成してください。

アドビ公式サイト:クリエイティブ、マーケティング、文書管理ソリューション
https://www.adobe.com/jp/

アカウントがすでにある人は、ログインしてください。

ログインで来たら、下記からコンソールに移動します。

Adobe I/O Console
https://console.adobe.io/integrations

そのページに「New Integration」というボタンがあるので、そこから新規のアプリを登録します。
なお、アプリ名などは後で変更できますので、ご安心を。
ちなみに、この登録だけではアプリストアでの公開ができないらしいので、テスト用ならOKですが、のちのち公開するなら審査を通してください。
この作業についても、このコンソール画面からできます。
スクリーンショットをとる手間などはありますが、審査自体は思ったよりもすんなり通りましたね。

 

各プラットフォームごとの導入方法については、下記のドキュメントを参考にしてください。

Documentation
https://www.adobe.io/apis/creativecloud/creativesdk/docs.html

 

以上、簡単ですが、Adobe Creative SDK についてでした。
Androidに導入が完了しましたら、改めて手順をまとめたいと思います。

  • この記事いいね! (0)
asaba 著者:asaba

【cordova】unable to load platformAPIでブラウザが開けなかった時の解決法

今回は再びコルドバの話題に戻ります。

先日cordovaを7.0.1から8.0.0にアップデートした時のことです。

直後にブラウザで動きを試したいと思い、いつものようにコマンドでnpm run serveでブラウザを実行したところ、下記のエラーが出現しました。

コルドバのバージョンをcordova.jsやモジュールにも認識させないといけなかったみたいです。

browserのplatformを入れ直したところ一発で解決しました。

一旦rmで消して↓


cordova platform rm browser

addで追加します


cordova platform add browser

ちなみに他のplatformを消す必要はないのでそこは大丈夫です。

一応このエラーの解決はしましたが、以前chromeで開けてたアプリがIEで表示されるようになってしまいました。原因は調査中です。

解決方法が見つかり次第このブログに書いていきたいと思います。

 

 

  • この記事いいね! (0)