dowell


Android

com.mikepenz:materialdrawerをアップデートしたらAndroidXが必要になって予定外のSupport LibraryからのandroidX移行

Posted by dowell on

AndroidStudioのリファクタリングからAndroidXへのマイグレーションはできますが
失敗したのか、よくわかりませんが
自分の場合はimportとXmlは手動で変えました。
ほんとはどこまで自動やってくれるんだろう。。


< android.support.v4.view.ViewPager
 xmlns:android="http://schemas.android.com/apk/res/android"

< androidx.viewpager.widget.ViewPager
 xmlns:android="http://schemas.android.com/apk/res/android"

https://developer.android.com/jetpack/androidx/migrate

Other

Android Oでフォアグラウンドサービスがjava.lang.RuntimeException [Caused by: java.lang.SecurityExceptio at android.app.Service.startForeground]

Posted by dowell on

Playコンソールでエラーを見つけた・・


java.lang.RuntimeException: 
  at android.app.ActivityThread.handleServiceArgs (ActivityThread.java:3698)
  at android.app.ActivityThread.access$1600 (ActivityThread.java:200)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1691)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:193)
  at android.app.ActivityThread.main (ActivityThread.java:6762)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)
Caused by: java.lang.SecurityException: 
  at android.os.Parcel.createException (Parcel.java:1950)
  at android.os.Parcel.readException (Parcel.java:1918)
  at android.os.Parcel.readException (Parcel.java:1868)
  at android.app.IActivityManager$Stub$Proxy.setServiceForeground (IActivityManager.java:5198)
  at android.app.Service.startForeground (Service.java:695)
  at com.doroidpanic.apps.service.xxyba.a (Xxyba.java:150)
  at com.doroidpanic.apps.service.xxyba.onStartCommand (Xxyba.java:102)
  at android.app.ActivityThread.handleServiceArgs (ActivityThread.java:3679)
Caused by: android.os.RemoteException: 
  at com.android.server.am.ActivityManagerService.enforcePermission (ActivityManagerService.java:9331)
  at com.android.server.am.ActiveServices.setServiceForegroundInnerLocked (ActiveServices.java:1193)
  at com.android.server.am.ActiveServices.setServiceForegroundLocked (ActiveServices.java:874)
  at com.android.server.am.ActivityManagerService.setServiceForeground (ActivityManagerService.java:20597)
  at android.app.IActivityManager$Stub.onTransact (IActivityManager.java:976)

ここにあった。
https://developer.android.com/about/versions/pie/android-9.0-changes-28#fg-svc

パーミッションが足りてないのか


< uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

動作の変更点: API レベル 28+ をターゲットとするアプリ
Android 9(API レベル 28)では、Android システムにさまざまな変更が加えられています。 以下の動作の変更点は、API レベル 28 以降をターゲットとするアプリのみに適用されます。 targetSdkVersion を API レベル 28 以降に設定するアプリは、必要に応じてアプリを修正してこれらの動作を適切にサポートする必要があります。
Android 9 で実行されるすべてのアプリに影響を与える変更点については、ターゲットとする API レベルに関係なく、動作の変更点: すべてのアプリをご覧ください。
フォアグラウンド サービス
Android 9 以降をターゲットにするアプリは、フォアグラウンド サービスを使用する際に FOREGROUND_SERVICE パーミッションをリクエストする必要があります。 これは Normal パーミッションなので、リクエストしたアプリに自動で付与されます。

Android 9 以降をターゲットにするアプリが FOREGROUND_SERVICE をリクエストせずに、フォアグラウンド サービスの作成を試みると、システムにより、SecurityException がスローされます。

Android

AndroidStudioからGitHubにリモートプッシュしたら [Push rejected: Push master to origin/master was rejected by remote] [remote: error: GH007: Your push would publish a private email address.]

Posted by dowell on

既存のプロジェクトをAndroidStudioからGitHubにインポートはできましたが
ローカルのcommitをリモートへPushしようとしたらエラーが発生

Push rejected: Push master to origin/master was rejected by remote


Push rejected: Push master to origin/master was rejected by remote

ネットで調べて、pull origin masterしたけどダメだったので
プロジェクトディレクトリでターミナル開いてターミナルからGitコマンドを実行したら詳細なエラーがわかりました。

GH007: Your push would publish a private email address.


$git push origin master
Enumerating objects: 38, done.
Counting objects: 100% (38/38), done.
Delta compression using up to 8 threads
Compressing objects: 100% (16/16), done.
Writing objects: 100% (20/20), 2.37 KiB | 809.00 KiB/s, done.
Total 20 (delta 11), reused 0 (delta 0)
remote: Resolving deltas: 100% (11/11), completed with 11 local objects.
remote: error: GH007: Your push would publish a private email address.
remote: You can make your email public or disable this protection by visiting:
remote: http://github.com/settings/emails
To https://github.com/doroidpanic/test.git
 ! [remote rejected] master -> master (push declined due to email privacy restrictions)
error: failed to push some refs to 'https://github.com/doroidpanic/test.git'

GitHubのエラーコードGH007でした
Githubのアカウント設定で「Keep my email address private」なのに
そのメールアドレスが設定されているので止めてくれていたようです。

Commitに残るアドレスは


git config --global user.email

で確認できます。

GitHubにログインしてのメールアドレス設定のページにアクセスすると
「Primary email address」のところに自分の匿名?”@users.noreply.github.com”のメールアドレスが記載されています。
フォントの関係で見えにくいですが、説明文の中に@users.noreply.github.comがあります。

それをGitに設定しました。


 git config --global user.email  "@users.noreply.github.com"

ローカルコミットの取り消し


git reset --soft HEAD^

ターミナルでHeadしたら、AndroidStudio側の履歴も即反映されたので
もう一度コミットして詳細をみると、メールアドレスが@users.noreply.github.comになっています。
それから再度リモートプッシュしたら成功しました。


プッシュ成功: Pushed 1 commit to origin/master

https://github.com/settings/emails

Mac

なんだかんだ動いてたVMware Fusion 8.5.10がmacOS Mojave 10.14.2(18C54)にアップデートでやっと動作不具合

Posted by dowell on

2018/12にmacOS Mojave 10.14.2の更新がきていたので、macbook Airを更新したら
YosemiteやHigh Sierra、macOS Mojaveでもなんだかんだ動作していたVMware Fusion 8.5.19が動かないというか
マウスやキーボードの操作が仮想マシンに伝わらなくなってしまった。

VM toolがインストールされたWindowsもDebianのインストーラーもキーボードやマウスが全く反応しなくなりました。
OSの起動はするし、「更新プログラム」のポップップもでるので、仮想マシン自体は普通に動いてます。
多分SSHとか設定してあればアクセスできるのかな?

VMware Fusion 8.5.19の動作不具合

不具合といってもすでにVMware Fusion 8.5.10はmacOS Mojaveなんて対応してないので仕方ないことですが
parallels mac Proは1台しか持っていなかったので、とりあえずMBAに余ってたライセンスでVMware Fusionを使っていましたが
なんだかんだ問題なく?(気づかないだけかも)WindowsもUbuntuも使えたのでそのまま使っていましたが
とうとうmacOS Mojave 10.14.2の更新でダメになりました。

Macのメジャーアップデートで起動しなくなるparallelsよりそこんところは好きだったんだけど
さすがにVMware Fusion 8.5.10は10.14.2まででした。
parallelsのProを追加するか、Fusion11にしてみるか。悩む

dapps-solidity

ERC721トークンを作成してOpenSeaに掲載してみる – Dapps

Posted by dowell on

OpenSeaにトークンを掲載する方法

OpenSeaのチュートリアルをやってみる。

OpenSea Developer Tutorial
Simple tutorial for a customizable marketplace for buying and selling on OpenSea

SUGGEST EDITS
Want an instant, customizable marketplace for your game items, collectibles, or other ERC-721 assets? You’ve come to the right place.

This tutorial will show you how to go from start to finish building a storefront for your items. We’ll walk you through structuring your ERC721 contract and off-chain metadata, viewing your items on OpenSea, and testing out the auction flow for your items.

By the end of this tutorial, you’ll know how to integrate with OpenSea and create a custom storefront for your items, just like the OpenSea Creature example storefront in this tutorial.

引用 https://docs.opensea.io/docs/1-structuring-your-smart-contract

OpenSeaCreatures ERC721 contracts
About OpenSeaCreatures.
This is a very simple sample ERC721 for the purposes of demonstrating integration with the OpenSea marketplace. We include a script for minting the items.

Additionally, this contract whitelists the proxy accounts of OpenSea users so that they are automatically able to trade the ERC721 item on OpenSea (without having to pay gas for an additional approval). On OpenSea, each user has a “proxy” account that they control, and is ultimately called by the exchange contracts to trade their items. (Note that this addition does not mean that OpenSea itself has access to the items, simply that the users can list them more easily if they wish to do so)

引用 https://github.com/ProjectOpenSea/opensea-creatures


$ truffle deploy  --network rinkeby
Using network 'rinkeby'.

Running migration: 1_initial_migrations.js
  Deploying Migrations...
  ... 0xe301680767e2d01...hash
  Migrations: 0x629598f...hash
Saving artifacts...
Running migration: 2_deploy_contracts.js
  Deploying Creature...
  ... 0xf540...hash
  Creature: 0x40098d....コントラクトのアドレス
Saving artifacts...

GitHubのReadmeはこうなってるけど

Minting tokens.

After deploying to the Rinkeby network, there will be a contract on Rinkeby that will be viewable on Rinkeby Etherscan. For example, here is a recently deployed contract. You should set this contract address and the address of your Metamask account as environment variables when running the minting script:


export OWNER_ADDRESS=""
export CONTRACT_ADDRESS=""
export NETWORK="rinkeby"
node scripts/mint.js

HDWalletProviderを指定する際に、アドレスのインデックスを指定しようとmint.jsを編集してたら
GitHubのReadmeと指定するべき環境変数が違ったので注意。

OWNER_ADDRESSはmint.jsで読み込んでますが
CONTRACT_ADDRESSは読み込まれておらず
NFT(ERC721)とFACTORY(ガチャ)の分岐があるので
今回はNFT(ERC721)なので、FACTORY_CONTRACT_ADDRESSを指定します。


const HDWalletProvider = require("truffle-hdwallet-provider")
const web3 = require('web3')
const MNEMONIC = process.env.MNEMONIC
const INFURA_KEY = process.env.INFURA_KEY
const FACTORY_CONTRACT_ADDRESS = process.env.FACTORY_CONTRACT_ADDRESS
const NFT_CONTRACT_ADDRESS = process.env.NFT_CONTRACT_ADDRESS
const OWNER_ADDRESS = process.env.OWNER_ADDRESS

途中省略
async function main() {
    const provider = new HDWalletProvider(MNEMONIC, `https://${NETWORK}.infura.io/${INFURA_KEY}` , 5 )
    const web3Instance = new web3(
        provider
    )


    if (NFT_CONTRACT_ADDRESS) {
        const nftContract = new web3Instance.eth.Contract(NFT_ABI, NFT_CONTRACT_ADDRESS, { gasLimit: "1000000" })

        // Creatures issued directly to the owner.
        for (var i = 0; i < NUM_CREATURES; i++) {
            const result = await nftContract.methods.mintTo(OWNER_ADDRESS).send({ from: OWNER_ADDRESS });
            console.log("Minted creature. Transaction: " + result.transactionHash)
        }
    } else if (FACTORY_CONTRACT_ADDRESS) {

NETWORKはすでにデプロイ時に反映済みなので
NFT_CONTRACT_ADDRESS、OWNER_ADDRESSを指定して実行しました。


$ export NFT_CONTRACT_ADDRESS="0x4006....デプロイしたContractのアドレス"
$ export OWNER_ADDRESS="0x01234...オーナーとするアドレス"
$ node scripts/mint.js
Minted creature. Transaction: 0xc90108641fa6b7...TxHash
Minted creature. Transaction: 0x52a54629d83812...TxHash
Minted creature. Transaction: 0x876160fee54a33...TxHash
Minted creature. Transaction: 0x500a341ec082c0...TxHash
Minted creature. Transaction: 0xc02abbbe93f762...TxHash
Other

残高はあるのにtruffle deployで「Error encountered, bailing」- HDWalletProvider

Posted by dowell on

Using network 'rinkeby'.

Running migration: 1_initial_migrations.js
  Deploying Migrations...
Error encountered, bailing. Network state unknown. Review successful transactions manually.
insufficient funds for gas * price + value

今回で言えばrinkebyの残高があるアドレスはMetamaskの5番目に生成したアドレスで
HDWalletProviderがそのアドレスを見ていなかったのが原因
HDWalletProviderに指定したいアドレスのindexを引き渡してあげる。


return new HDWalletProvider(
          MNEMONIC,
          "https://rinkeby.infura.io/" + INFURA_KEY
        , index );
Other

opensea向けのDappsを作ろうと思ったらnpm installでエラー – gyp ERR! not ok

Posted by dowell on

npm installで「gyp ERR! not ok」となってしまう。


gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:262:23)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:240:12)
gyp ERR! System Darwin 18.2.0
gyp ERR! command "/usr/local/Cellar/node/10.11.0/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Users/dp/src/Ethereum/opensea-creatures/node_modules/sha3
gyp ERR! node -v v10.11.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok

package.jsonをみたらNodeのバージョンが高すぎるみたい。。


"engines": {
    "node": "8.11.x",
    "npm": "5.6.x"
  }

nodebrewを使ってるので、切り替えてOK


nodebrew install-binary v8.11.0
nodebrew use v8.11.0
Other

npm installでエラー

Posted by dowell on

npm install

Unhandled rejection Error: Command failed: /usr/local/bin/git submodule update -q --init --recursive
warning: templates not found in /var/folders/bv/0637g83s7bz_00000380000gn/T/pacote-git-template-tmp/git-clone-ea88f8b6
warning: templates not found in /var/folders/bv/0637g83s7bz_00000380000gn/T/pacote-git-template-tmp/git-clone-ea88f8b6
git-lfs smudge 'data/merkleTree.json': git-lfs: command not found
error: external filter 'git-lfs smudge %f' failed 127
error: external filter 'git-lfs smudge %f' failed
fatal: data/merkleTree.json: smudge filter lfs failed

brew install git-lfs
git lfs install
VPS

LogFormatを書き換え用と思ったら「Note that the use of %{X-Forwarded-For}i instead of %h is not recommended.」でubuntoでmod_remoteip

Posted by dowell on

ConohaVPSではアクセスIPはWAFのIPになります。
%{X-Forwarded-For}iを設定しようとしたら、注意文になにやらmod_remoteipを使えと。。


These deviate from the Common Log Format definitions in that they use %O
(the actual bytes sent including headers) instead of %b (the size of the requested file), because the latter makes it impossible to detect partial
requests.

#Note that the use of %{X-Forwarded-For}i instead of %h is not recommended.
#Use mod_remoteip instead.
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

知らなかった。
昔から%{X-Forwarded-For}iを追加を何も考えずに設定していたので初めてmod_remoteipを設定してみる。


root@conoha-dev:~#apachectl configtest
AH00526: Syntax error on line 227 of /etc/apache2/apache2.conf:
Invalid command 'RemoteIPHeader', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
The Apache error log may have more information.
root@conoha-dev:~#

あれ?モジュールがない?
a2enmodでモジュールをロードします。


root@conoha-dev:/etc/apache2# a2enmod remoteip
Enabling module remoteip.
To activate the new configuration, you need to run:
  systemctl restart apache2
root@conoha-dev:/etc/apache2# tree
├── mods-enabled
│   ├── access_compat.load -> ../mods-available/access_compat.load
│   ├── alias.conf -> ../mods-available/alias.conf
│   ├── alias.load -> ../mods-available/alias.load
│   ├── auth_basic.load -> ../mods-available/auth_basic.load
│   ├── authn_core.load -> ../mods-available/authn_core.load
│   ├── authn_file.load -> ../mods-available/authn_file.load
│   ├── authz_core.load -> ../mods-available/authz_core.load
│   ├── authz_host.load -> ../mods-available/authz_host.load
│   ├── authz_user.load -> ../mods-available/authz_user.load
│   ├── autoindex.conf -> ../mods-available/autoindex.conf
│   ├── autoindex.load -> ../mods-available/autoindex.load
│   ├── deflate.conf -> ../mods-available/deflate.conf
│   ├── deflate.load -> ../mods-available/deflate.load
│   ├── dir.conf -> ../mods-available/dir.conf
│   ├── dir.load -> ../mods-available/dir.load
│   ├── env.load -> ../mods-available/env.load
│   ├── filter.load -> ../mods-available/filter.load
│   ├── mime.conf -> ../mods-available/mime.conf
│   ├── mime.load -> ../mods-available/mime.load
│   ├── mpm_prefork.conf -> ../mods-available/mpm_prefork.conf
│   ├── mpm_prefork.load -> ../mods-available/mpm_prefork.load
│   ├── negotiation.conf -> ../mods-available/negotiation.conf
│   ├── negotiation.load -> ../mods-available/negotiation.load
│   ├── php7.2.conf -> ../mods-available/php7.2.conf
│   ├── php7.2.load -> ../mods-available/php7.2.load
│   ├── reqtimeout.conf -> ../mods-available/reqtimeout.conf
│   ├── reqtimeout.load -> ../mods-available/reqtimeout.load
│   ├── rewrite.load -> ../mods-available/rewrite.load
│   ├── setenvif.conf -> ../mods-available/setenvif.conf
│   ├── setenvif.load -> ../mods-available/setenvif.load
│   ├── socache_shmcb.load -> ../mods-available/socache_shmcb.load
│   ├── ssl.conf -> ../mods-available/ssl.conf
│   ├── ssl.load -> ../mods-available/ssl.load
│   ├── status.conf -> ../mods-available/status.conf
│   └── status.load -> ../mods-available/status.load
├── ports.conf

root@conoha-dev:/etc/apache2#apachectl configtest
Syntax OK
root@conoha-dev:/etc/apache2#
Android

Cordova run が固まる Freeze on executing ‘cordova run’

Posted by dowell on

Cordova run

がうんともすんとも言わなくなった。。
そんなときは「–verbose」をつけて確認してみる。


#cordova run  --verbose
  copy  www/node_modules/material-design-icons/image/2x_web/ic_filter_6_black_24dp.png platforms/android/assets/www/node_modules/material-design-icons/image/2x_web/ic_filter_6_black_24dp.png (new file)
  copy  www/node_modules/material-design-icons/image/2x_web/ic_filter_6_black_36dp.png platforms/android/assets/www/node_modules/material-design-icons/image/2x_web/ic_filter_6_black_36dp.png (new file)
  copy  www/node_modules/material-design-icons/image/2x_web/ic_filter_6_black_48dp.png platforms/android/assets/www/node_modules/material-design-icons/image/2x_web/ic_filter_6_black_48dp.png (new file)
  copy  www/node_modules/material-design-icons/image/2x_web/ic_filter_6_white_18dp.png platforms/android/assets/www/node_modules/material-design-icons/image/2x_web/ic_filter_6_white_18dp.png (new file)
  copy  www/node_modules/material-design-icons/image/2x_web/ic_filter_6_white_24dp.png platforms/android/assets/www/node_modules/material-design-icons/image/2x_web/ic_filter_6_white_24dp.png (new file)

ディレクトリ間違えててwwwディレクトリにアイコンセットをnpm installしてたみたいです。。
大量のコピーが走って固まってるように見えてただけでした。