急速充電まとめ

急速充電器についてのまとめ

急速充電の購入にあれこれ調べて購入したので備忘も兼ねてメモしたので、 シェアさせて頂きます

経緯と課題

急速充電器に関するブログ を見ると、サイズと重さと出力の3点で考えた時に以下モデルが優秀.

  • CIO GaN 65W 3ポート 65w  83160 105g 45w+10w+5w 非対応。

しかしながら私の所有していたPCの仕様を見ると、 どうやら対応していない模様

私の所有していたPC

PC:ThinkPad X1 Carbon (5th)

PCのPD製品モデル.:TPS65982

充電できないアダプタ仕様:

  • PPSに対応
  • Source_Capabilitiesメッセージで通知するPDOの数が7個

参考URL

充電器と、ThinkPad X1 Carbon (5th)との対応状況

  • 1port

RAVPower 20W ★購入:PC持ち運びしない時用(旅に持っていくIphone充電用)

  • 2port

RAVPower RP-PC133 65W 95287 115g 45w+18w 対応

RAVPower RP-PC128 90w 135200 192g 100wをシェア ★購入:PCを持ち運び・家・仕事用(ハイキング時などは家に置いていく。)

  • 3port:

CIO GaN 65W 3ポート 65w  83160 105g 45w+10w+5w 非対応。

AUKEY Omnia Mix3 90w 130944 179g 60w+12w+12w

  • 4port:

RAVPower RP-PC136 65w 127756 165g(250g) 18w+18w+12w+12w

HyperJuice GaN 100W Dual 100w 147900 197g ポート合計100W(45W+30W+12W+12W) 対応。

CIO LilNob Share 65w 76500 111g 20w+20w+15w 非対応。

所有端末(私の端末は何れもType-CのI/Fの充電口でOK)

Iphone13(充電供給口:Type-C) 急速充電には18Wで十分 IphoneSE2(充電供給口:Type-C) 急速充電には18Wで十分 Pixel3a (充電供給口:Type-C) 急速充電には18Wで十分 Lenovo ThinkPad (充電供給口:Type-C) 急速充電には45Wで十分

私の選択

旅用にRAVpowerの20W, PC充電用にRAVpowerの90W(PC自体は45Wで十分)

あくまでご参考までにして頂ければと思います

Storage Access Framework への置き換え (File:スキームからContent: スキームへ置き換えを行う)

Android OS 11( API level 30 導入)に辺り、StorageAccess周りの実装をFileスキームメインから、Contentスキームをメインとする実装に置き換えたので、 それに辺り、参考にしたサイトリンクを備忘用に貼っておく。(何もまとまっていませんが、参考になれば幸いです、、)

SAFによるlistFiles(),copyDocument,move,rename等

copyDocumentは課題あり。 https://stackoverflow.com/questions/66660155/android-saf-cannot-copy-file-flag-supports-copy-not-set

use ContentProvider https://stackoverflow.com/questions/64820884/documentscontract-copydocument

SAFの初期URL指定について

FileスキームからContentスキームへのConvert

直接,FileスキームからContentスキームへ変換できないので、InputStream/OutputStreamを介して変換した。 you cannot directory convert File scheme to Content scheme. So, first you open inputStream from File scheme copy inputstream to outputstream at Byte format. then, save outputStream as Content scheme.

https://qiita.com/wakamesoba98/items/98b79bdfde19612d12b0

  • 参考
public static final int EOF = -1;
private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;

public static boolean convertFileToContent(File file, Uri uri, context) {
    try {
        InputStream inputStream = null;
        OutputStream outputStream = null;
        try {
            iuputStream = new FileIutputStream(file);
            outputStream = context.getContentResolver().openOutputStream(uri, "w").;

            long fileSizeSaved = copy(inputStream, outputStream);
            outputStream.flush();
            return true;
        } catch (IOException e) {
            return false;
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
            if (outputStream != null) {
                outputStream.close();
            }
        }
    } catch (IOException e) {
        return false;
    }
}

private static long copy(InputStream input, OutputStream output) throws IOException {
    final byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
    long count = 0;
    int n;
    while (EOF != (n = input.read(buffer))) {
        output.write(buffer, 0, n);
        count += n;
    }
    return count;
}

Android11ではall files access permission権限が追加され、強力な権限のため、ユーザープライバシーを考慮し出来る限り推奨されない。

-android11(API level30)->pravacy->storage update https://developer.android.com/about/versions/11/privacy/storage?hl=ja

  • MANAGE_EXTERNAL_STORAGE

https://support.google.com/googleplay/android-developer/answer/10467955?hl=ja#zippy=%2C%E7%84%A1%E5%8A%B9%E3%81%AA%E4%BD%BF%E7%94%A8%2C%E4%B8%80%E8%88%AC%E7%9A%84%E3%81%AA%E7%94%A8%E9%80%94%E3%81%AB%E4%BB%A3%E3%82%8F%E3%82%8B%E6%96%B9%E6%B3%95

  • MediaStoreAPI

https://developer.android.com/training/data-storage/shared/media

Fileスキームで使用していた APIについて

http://s-prism3.seesaa.net/article/430252817.html -local storage -> getExternalFilesDirs() -shared storage -> getExternalStorageDirectory()

他、GoogleChromeOSをメンテナンスする開発者向けに、参考までに

非表示領域を表示する https://ahiru8usagi.hatenablog.com/entry/Chromebook_Android_Storage

公式 https://support.google.com/chromebook/answer/1700055?hl=ja

about GoogleOS https://developer.android.com/chrome-os/intro?hl=ja

railsでsqlite3のversionエラーで正常に動作しない件について

AWSの勉強をしていたところ、 rails sを実行するも下記エラーが発生した。 解決方法が判明したのでシェア。

★エラー名

Specified 'sqlite3' for database adapter, but the gem is not loaded. Add gem 'sqlite3' to your Gemfile (and ensure its version is at the minimum required by ActiveRecord). (Gem::LoadError)

★解決方法

  1. GemFileを開く.

    f:id:Appkun:20211005125204p:plain
    GemFile

  2. 以下のように修正する.

変更前 gem 'sqlite3'

変更後 gem 'sqlite3', '~>1.3.0'

f:id:Appkun:20211005125335p:plain
GemFile編集

★原因

Rails 5.0.7.2 では sqlite3 のバージョン 1.4 系に対応していないといったところが原因の模様。

参考URL

AndroidでThis version of Android Studio cannot open this project, please retry with Android Studio 4.2 or newer.とエラーが出てRun実行失敗したときの対応メモ.

androidでRun実行時に以下のエラーが出て失敗、解決方法が判明したのでシェア.

error

This version of Android Studio cannot open this project, please retry with Android Studio 4.2 or newer.

環境

android version 4.1.3

Win10 64bit

原因.

Gradleとpluginのversionが噛み合っていないことが原因の模様.

参考にした記事はこちら

対策.

File→Project Structureを開く.. Gradleとpluginのversionをそれぞれ以下のように変更.

以下のversion要件表に基づいて変更.

Gradle Plugin
変更前 4.2.2 6.7.1
変更後 4.1.3 6.7

[参考]Plugin vs Gradleの要件表.

Plugin Gradle
4.1.0 以降 6.5 以降
4.2.0 以降 6.7.1 以降

参考にしたAndroidの公式URLはこちら

追記

その後、Android Studioを使ってエミュレーター上のAndroidでアプリを実行しようとすると 「Waiting for target device to come online」というようなメッセージが表示されたままアプリが実行できない状態になった. 以下のURLに倣い、wipe dataを行ったところ、インストールされるようになった。

参考にしたURLはこちら

androidでDBをコンソールでアクセスする時の注意点をシェア.

androidでDBをコンソールでアクセスする時の注意点をシェア.

 

1. GooglePlay対応の入っていない仮想デバイスを準備する


※GooglePlay対応入りの場合、以下のようなエラーが出る.

error: inaccessible or not found参考URLhttps://qiita.com/uchip__/items/d128391cdb4169ccc3c5


2. コンソールを開き、sdk配下のplatform-toolsへ移動する.

run-asコマンドを使用して、databasesディレクトリにアクセスする。そうしないと、databasesに移動しようとすると「Permission denied」と表示される。以下のように入力する。


<コンソール操作例>
run-as (パッケージ名)

cd databases

sqlite3 (db名).db

PC ThinkPad X1 Carbon (5th)に合う急速充電器

急速充電まとめ

急速充電器の選ぶ基準について、私の持っているガジェットに合わせて選んでみましたので考え方をシェア(参考にはならないかもしれませんが)。

私の持っているガジェット類

  • PC ThinkPad X1 Carbon (5th)  (毎日使用)
  • iphone-X (毎日使用)
  • applewatch 4th (毎日使用)
  • iphone-SE2  (使用頻度は低い)
  • airpods 2th  (使用頻度は低い)

調査結果

急速充電についての参考ブログ を見ると、サイズと重さと出力の3点で考えた時にCIO LilNob Shareモデルが優秀.

しかしながら私が持っているPCの仕様を見ると、対応していない模様。

購入を迷った3つのモデル

  • HyperJuice GaN 100W Dual 100w 4port
  • RAVPower RP-PC136 65w 4port
  • RAVPower RP-PC128 90w 2port

結果、RAVPower RP-PC128を購入

結局RAVPower系は対応しているようなので、RAVPower RP-PC128を購入することに決定。

2port x type-c x 90w を選択した理由は、

  • HyperJuice GaN 100W Dual は、大きさ重さの割に100wと実に優秀。しかし持ち運びを考えた時にやや大きい。
  • RAVPower RP-PC136は、持ち運びを考えた時に、65w程度の実力しかない割に、配線込み250gと重い。さらに127756 mm3と他のモデルより相対的にやや大きい。
  • RAVPower RP-PC128 は、大きさ重さの割に100wと実に優秀でかつ、type-cの2本ということで、実力を十分に発揮可能なportのみがついている。type-Aのみのapplewatchを持っているが、type-A -> type-c変換アダプタで良いかということで、私の持っているガジェットをtype-cに統合することで、本充電器を採用した。type-cに統合してしまうと今度はtype-Aの口しか受け付けていない飛行機や車で困りそうなので、その場合にtype-c -> type-A変換アダプタも用意しようと思っている。

使い方:

  • 昼のリモートワーク時は、PC(45w)とiphone-X(18w)相当の充電として使用。 (使用頻度は低いiphone-SE2と、airpods 2thは昼にPCとiphone-Xの充電がmaxになっていたら充電する。)

  • 夜の睡眠時は、iphone-X(18w)とapplewatch(5w)相当の充電として使用。

検討したモデル

(持ち運びの観点で、Wワットと体積(mm3)の重さ(g)の関係はかなり重要)

2port

メーカ 型番 w mm3 g 分配 ThinkPad X1 Carbon (5th)に対応しているか
RAVPower RP-PC133 65W 95287 115g 45w+18w 対応 https://worktoolsmith.com/ravpower-gan-usb-pd-charger-review-1/
RAVPower RP-PC128 90w 135200 192g 100wをシェア

3port

メーカ 型番 w mm3 g 分配 ThinkPad X1 Carbon (5th)に対応しているか
CIO GaN 65W 3ポート 65w   83160 105g 45w+10w+5w 非対応。
AUKEY Omnia Mix3 90w 130944 179g 60w+12w+12w

4port

メーカ 型番 w mm3 g 分配 ThinkPad X1 Carbon (5th)に対応しているか
RAVPower RP-PC136 65w 127756 165g(250g) 18w+18w+12w+12w
HyperJuice GaN 100W Dual 100w 147900 197g ポート合計100W(45W+30W+12W+12W) 対応。
CIO LilNob Share 65w 76500 111g 20w+20w+15w 非対応。

RaspberryPiからSlackにアップロードする.

workSpaceを新たに作る

slack api ページから Oauth & Permission タグを開く。

UserToken Scopesに以下へのpermissionを追加する.

※参考URL記載のpermissonからはslackのverが上がっているためか、 permission名が微妙に変わっているので注意.

f:id:Appkun:20201004155040p:plain
permission設定情報

Python Code

準備:pythonコードにTokenや、チャンネルの識別情報を入力する.

  1. 上記で発行した下記のTokenを下記pythonデータに配りつける。
  2. チャンネルIDをslackサイトよりメモし記載する。
  3. チャンネルの名前をslackサイトよりメモし記載する。

実行:python capture.pyで実行する.

"capture.py"

import commands
import time

commands.getoutput("raspistill -w 1200 -h 900 img01.jpg -ev 3 -ISO 800")

from slacker import Slacker
token = "XXXX-XXXX-XXXXXX"
slacker = Slacker(token)
channel_name = "#"+"チャンネルの名前"

slacker.chat.post_message(channel_name, 'this is chapture')

result = slacker.files.upload('../camera/img01/image.jpg',channels=['チャンネルID'])


# まだ不具合あり.[start]

#slacker.pins.add(channel='チャンネルID',timestamp=str(time.time()), file_=result.body['file']['id'])
slacker.pins.add(channel='チャンネルID',timestamp=str(time.time()))

# まだ不具合あり.[End]

★問題 1件

slacker.pins.add に失敗する... こちらについては、解決次第再投稿させていただきます。

※参考 https://nn-hokuson.hatenablog.com/entry/2017/10/11/205438