AndroidのGPS情報とジャイロセンサーを元にマップを移動するアプリを作る

AndroidのGPS情報が取れたら

UE4でAndroidのGPS情報を得る

これを元にマップを移動するアプリを作ります。まあ、ポケGOですね。

EVENT BIGIN PLAYでGPSを初期化して有効か無効かを判定するブーリアンを用意します

EVENT TICKでGPSが使えるか分岐します。

GPSが使える場合はシーケンスに進みます

で、後で書き込むstring変数が空なら分岐します

で、flugのブーリアンは最初falseなので最初は上を通りウィジットの「GPS情報を取得中」と表示します。で、GPS情報が得られたらstring変数に格納されるので下に移動してウィジットを消去します。

で次のシーケンスへ移動し、GPS情報がEVENTとして受け取れたらその情報を得ます

GPS情報が得られたらその情報がString変数にここでSETされます。

Firstflugのブーリアンは最初はTRUEにしてあります。最初の一回はTRUEが走ります。そしたらFirstflugはFALSEにします

以降はGPSが取得される度に下が走ります。

で、最初に取得した緯度、経度と次に取得した緯度、経度の差を得ます。

得たら現在のPawnのLocationを得てLerpで補正を0.1/Tickずつ加算して得た差をターゲットに移動させます。また、ジャイロセンサの情報をTiltを取得してPawnのTotaterを得て同様にLerpで補正を0.02/Tickずつ加算しますがこれは僕のNexus5のジャイロセンサーの振れがすごいので振れを抑制するのにTickの移動を小さくしています。

これでAndroidの向きと移動が取れます。緯度、経度の差に1000000を掛けているのはUE4の単位がcmなので0.000001の緯度、経度の単位がcmなので合わせるのに使っています。これでUE4のマップのサイズと地球のサイズが合いました。

ではAndroidで動かしてみましょう。動作確認できている端末はNexus5:Android6.0です。

https://phpjavascriptroom.com/?t=mobile&p=android_apk_install

↑apkインストール方法

このapkはこちらからDLできます

忘れちゃうのでAWSにTERA TERMで接続する方法

まず、EC2の自分の使っているリージョンのEC2ダッシュボードへログインする。

https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-1#Home:

で、実行中のインスタンスをクリックする

接続をクリックする

で、表示される秘密鍵ファイル名と接続先をコピーしておく

xxx.pemは作成しておく。

接続先はTERATERMの接続先になる

接続先ホスト名を入れてOK

秘密鍵へのパスを入れて、AWSのユーザー名(Ubuntuでインスタンスを作成していればUbuntuで)でログイン

UE4でAndroidのGPS情報を得る

UE4でAndroidのGPS情報を得る方法

まず、バージョンは4.15以上でないとダメらしい。

事前準備として以下が必要

  1. VisualStudio2015以上
  2. AndroidStudioとAndroidSDKのセットアップ
  3. C:\Program Files\Epic Games\UE_4.15\Engine\Extras\AndroidWorks\Win64\CodeWorksforAndroid-1R5-windows.exeのセットアップ

以上が必要。3はUE4インストール時の環境による。またSDKはテストするAndroidのバージョンに合わせてセットアップする。

で、UE4の「編集」→「プロジェクト設定」を開き

プラットフォーム-Androidを「プラットフォームファイルは書き込み可能です」にする。

こうなればOK

で、次に「編集」→「Plugins」を開き

MobileLocationServicesAndroidとBlueprintLibrary、PatchingUtilityのチェックを入れる。iOSの場合はiOSのチェックを入れる

で、LevelのBlueprintを開く

で、まず初期化してTikでGPS情報を更新する

GPSの正確さを指定して、更新頻度をミリ秒単位で設定する(ここでは1000ミリ秒で設定)で、最小距離フィルター?を設定するがこれはいまいちわからない。

で、EventTickでGetLocationServiceImplでGPS情報をゲットしてイベントを受け取る

受け取れる情報は

  1. タイムスタンプ
  2. 緯度
  3. 経度
  4. 水平測位精度
  5. 垂直測位精度
  6. 高度

となっている。ここではAppendしてプリント分で画面出力しているが、改行は「shift+enter」でできる。

UIの作成は以下を参照

https://docs.unrealengine.com/ja/Engine/UMG/HowTo/CreatingWidgets/index.html

COBOLってよく聞くが試しにUbuntuにインストールしていつものHELLO WORLDさせてみる

COBOLってよく聞くよね化石みたいな言語らしい

って、UbuntuにOpen-COBOLってインストールしてみて「HELLO WORLD」ってプリントしてみる。

【Open-COBOLをインストール】

user@user:~@ sudo apt-get install open-cobol

とUbuntuのコンソールに書いてリターン

パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
libmircommon6 linux-headers-4.8.0-28 linux-headers-4.8.0-28-generic
linux-image-4.8.0-28-generic linux-image-extra-4.8.0-28-generic
openbsd-inetd
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
autotools-dev libcob1 libcob1-dev libdb-dev libdb5.3-dev libgmp-dev
libgmp3-dev libgmpxx4ldbl libltdl-dev libncurses5-dev libtinfo-dev libtool
提案パッケージ:
db5.3-doc gmp-doc libgmp10-doc libmpfr-dev libtool-doc ncurses-doc autoconf
automaken gfortran | fortran95-compiler gcj-jdk
以下のパッケージが新たにインストールされます:
autotools-dev libcob1 libcob1-dev libdb-dev libdb5.3-dev libgmp-dev
libgmp3-dev libgmpxx4ldbl libltdl-dev libncurses5-dev libtinfo-dev libtool
open-cobol
アップグレード: 0 個、新規インストール: 13 個、削除: 0 個、保留: 4 個。
2,105 kB のアーカイブを取得する必要があります。
この操作後に追加で 8,902 kB のディスク容量が消費されます。
続行しますか? [Y/n] y

こんな感じでインストール
ちゃんとインストールされとるか確認する

user@user:~@ cobc --v

インストールされればこんな感じで表示される

cobc (OpenCOBOL) 1.1.0
Copyright (C) 2001-2009 Keisuke Nishida / Roger While
Built    Aug 04 2016 15:56:22
Packaged Feb 06 2009 10:30:55 CET

じゃ、早速HelloWorld!してみましょう。
viエディタでカレントにHW.cobってソースファイルを作ります。

user@user:~@ vi HW.cob

そしたら以下を書きます。

      *これはコメントでソースは8文字目から始めます
      *7文字目まではスキップされますよ!注意しましょう!
       IDENTIFICATION DIVISION.
       PROGRAM-ID. helloworld.
       PROCEDURE DIVISION.
       DISPLAY "Hello World!".
       STOP RUN.
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"HW.cob" [Incomplete last line] 5 lines, 141 characters

【解説】
7文字目の*はC++、PHPでいう//でコメントです。
IDENTIFICATION DIVISION.とPROCEDURE DIVISION.は必要な呪文です。何も考えず入れましょう。
PROGRAM-ID. の後のhelloworld.は何でもいいんですがプログラムの識別子です。
DISPLAY “Hello World!”.のDISPLAYはC++、PHPでいうprintです。
STOP RUN.はここで終わりますねっていう呪文です。
,/td><<<<<<< 注意!)COBOLのソースは必ず8スペース開けてから書きます!コメントは*を7スペース目に入れて8文字目から書きますんで注意してください!この約束を守らないと「./HW.cob:1: Error: Invalid indicator ‘F’ at column 7」って怒られます!

COBOLは4つのカテゴリで分けられるようです。

構文 意味
見出し IDENTIFICATION DIVISION. 見出し呪文
環境部 ENVIRONMENT DIVISION. データファイルを記述
データ部 DATA DIVISION. 変数などのメモリ領域を記述
手続き部 PROCEDURE DIVISION. 処理ルーチンを記述

じゃ、コンパイル(ビルド)しますね。

user@user:~@ cobc -x HW.cob
user@user:~@

するとカレントに`HW`って実行ファイルができますので実行させてみます。

user@user:~@ ./HW
Hello World!

おお!Hello World!しましたね!おしまい。次は計算が得意な言語らしいので計算をさせてみます。

Download CounterをWPプラグイン、PHP:Mysql、ファイル 形式で作成する[第二回]

ダウンロードカウンターで検索してこられる人が結構いるので今回は①WPプラグイン形式、②PHPスクリプトでMysql形式で記録閲覧、③PHPスクリプトでファイルで記録閲覧という3つのダウンロードカウンターを作ってみることにする

【実装】

まず、Anonymous(匿名)でのダウンロードとアカウント(登録制)を切り替えられるようにするため、WPの認証機能を使います。※いらねーかな

require_once('./wp-load.php');

これを書くとWPのユーザーが今誰かを見ることができるようになります。_oneceなので一回だけって意味です。

あとは

/*オブジェクトを生成*/
new dlcounter;

というオブジェクトを作成して

/*dlcounterクラスを定義*/
class dlcounter {
    /*コンストラクタだから一回だけ:UE4Blueprintの場合はEventBiginPlay*/
    function __construct() {
        /*wordpressから自身のMySQLへ接続するインスタンスを呼ぶ*/
        global $wpdb;
        add_action('admin_menu', array($this, 'add_admin'));//管理者メニューに追加する準備
    }
 
    /*管理メニューの設定*/
    function add_admin() {
        if(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)=="ja"){
            $menuname="DLカウンター";
        }else{
            $menuname="DLCounter;
        }
        //level_8から10が管理者
        add_menu_page($nenuname,$menuname,'level_9', __FILE__, array($this,'dl_counter'));
    }

として以降に

function dl_counter(){

}

を書きます