Androidのメモとか

ポキオの日記です。今日も遅延してない。

【DJへの道】ArduinoでMIDIデバイスを作ってRaspberry Pi上のMixxxと連携させる

まずはボタンから。

ポキオ Arduino MIDI Raspberry Pi Mixxx

前回はMixxxをRaspberry Piにインストールしました

非力なRaspberry Pi 2Bでディスプレイも小さいですが、動作自体は問題なさそうです。

relativelayout.hatenablog.com

今回は、Mixxxを操作するハードウェアを作っていきます。

以前作ったデバイスを再利用

ハードウェアを作ると言っても、モノ自体は以前作ったデバイスを再利用していきます。

ポキオ Arduino MIDI Raspberry Pi Mixxx

こんな感じで、5つのボタンをGNDとデジタルIOピンにつないだものです。

ポキオ Arduino MIDI Raspberry Pi Mixxx

マイコン部分はArduino Leonardo互換機のSeeeduino Liteです。Atmega32U4が搭載されているのでUSBネイティブサポートも使えて、USBデバイスとしてエミュレーションも可能です。よって以て、USB接続できるMIDIバイスとしてもエミュレーション可能なはず…。

いざプログラミング

ハードウェアは再利用するので、それを制御するロジックを書き換えていきます。コーディングはArduino IDEで。 久しぶりのダウンロード・起動だったので、UIがガラッと変わっていたのでびっくりしました。

www.arduino.cc

さて、プログラミング自体は下記のArduinoのドキュメントを参考にコーディングしていきます。

docs.arduino.cc

ポイントは…

  • Native USB Port対応をしているボードを使う
  • MIDIを扱うためにMIDIUSBライブラリを使う

こんな感じ。MIDI系のライブラリは複数あってカオスですが、今回はArduinoドキュメントに従っていきます。

コードは最後の方に貼っておきますが、MIDIのやり取りとしてはノートオン・ノートオフを使っていきます。

void noteOn(byte channel, byte pitch, byte velocity) {
  Serial.println("noteOn");
  midiEventPacket_t noteOn = { 0x09, 0x90 | channel, pitch, velocity };
  MidiUSB.sendMIDI(noteOn);
}

void noteOff(byte channel, byte pitch, byte velocity) {
  Serial.println("noteOff");
  midiEventPacket_t noteOff = { 0x08, 0x80 | channel, pitch, velocity };
  MidiUSB.sendMIDI(noteOff);
}

こんな感じで、ノート(鍵盤)を押す・離すという情報をプログラム的に送信します。鍵盤なので、どの音階をどのくらいの速さ(強さ)で押すか、などの情報も送ります。今回は中央のド(C3)からソ(G3)までを5つのボタンに割り当てて、ノートオン・ノートオフで送信します。チャネルと速度は固定のものを使いました。

ドレミファソをMixxxのコントロールに割り当てる

今回ド〜ソまでの5つの音階が表現できるMIDIバイスが出来たので、それぞれDeck1/2のPlay・Cueに割り当てていきます。(5つのボタンのうち4つだけアサインしてみます)

ポキオ Arduino MIDI Raspberry Pi Mixxx

理想としてはこんな割り当て。実際にMixxxでマッピングしていきます。

ポキオ Arduino MIDI Raspberry Pi Mixxx

自作MIDIバイスRaspberry Piに接続してからMixxxを起動して、設定画面を開くとコントローラーというタブでデバイスが認識されているようです。

一応、プリセットという項目を覗いてみると、主要なDJコントローラーのマッピングには対応してそうですが、今回はプリセットは使わず、ラーニングウィザードを使って自力でマッピングしていきます。

ポキオ Arduino MIDI Raspberry Pi Mixxx

ラーニングウィザードを開くと、Mixxx上の要素が一覧で並んでいて、それぞれに信号のアサインが出来ます。

ポキオ Arduino MIDI Raspberry Pi Mixxx

とりあえず、Deck1/2のPlayとCueを探しては、実際にデバイスのボタンを押して、ボタンと制御の紐付けを行いました。

ポキオ Arduino MIDI Raspberry Pi Mixxx

こんな感じ。

いざDJ

4ボタンだけなので、凝ったことは出来ませんが、ちゃんとボタンと演奏がリンクしていました。

ポキオ Arduino MIDI Raspberry Pi Mixxx

雑感として

  • 理論的にはボタンやスライダーを追加していけばDJコントローラーは自作できる
  • ボタンがチャタるので、何かしらの制御が必要そう
  • ハードウェアボタンを同時に押したり操作したりすると、処理が追いつくか(他の処理をブロッキングしないか)が心配
  • ボタンが増えるとマッピングが面倒

こんな感じですねぇ。自作あるあるですが、やっぱり製品ってすげぇ…ってなりますね(笑)

とりあえず、横フェーダー・縦フェーダー、イコライザ、できればジョグあたりも追加してみたいところ・・・。

コードはこちら

#include <MIDIUSB.h>
#include <MIDIUSB_Defs.h>
#include <frequencyToNote.h>
#include <pitchToFrequency.h>
#include <pitchToNote.h>

#define BUTTON1 3
#define BUTTON2 5
#define BUTTON3 7
#define BUTTON4 8
#define BUTTON5 10

#define C3 48
#define D3 50
#define E3 52
#define F3 53
#define G3 55

#define DELAY 100

void setup() {
  pinMode(BUTTON1, INPUT_PULLUP);
  pinMode(BUTTON2, INPUT_PULLUP);
  pinMode(BUTTON3, INPUT_PULLUP);
  pinMode(BUTTON4, INPUT_PULLUP);
  pinMode(BUTTON5, INPUT_PULLUP);

  Serial.begin(9600);
}

void loop() {
  if (digitalRead(BUTTON1) == 0) {
    Serial.println("BUTTON1");
    noteOn(5, C3, 64);
    MidiUSB.flush();
    delay(DELAY);
    noteOff(5, C3, 64);
    MidiUSB.flush();
  }

  if (digitalRead(BUTTON2) == 0) {
    Serial.println("BUTTON2");
    noteOn(5, D3, 64);
    MidiUSB.flush();
    delay(DELAY);
    noteOff(5, D3, 64);
    MidiUSB.flush();
  }

  if (digitalRead(BUTTON3) == 0) {
    Serial.println("BUTTON3");
    noteOn(5, E3, 64);
    MidiUSB.flush();
    delay(DELAY);
    noteOff(5, E3, 64);
    MidiUSB.flush();
  }

  if (digitalRead(BUTTON4) == 0) {
    Serial.println("BUTTON4");
    noteOn(5, F3, 64);
    MidiUSB.flush();
    delay(DELAY);
    noteOff(5, F3, 64);
    MidiUSB.flush();
  }

  if (digitalRead(BUTTON5) == 0) {
    Serial.println("BUTTON5");
    noteOn(5, G3, 64);
    MidiUSB.flush();
    delay(DELAY);
    noteOff(5, G3, 64);
    MidiUSB.flush();
  }
}

void noteOn(byte channel, byte pitch, byte velocity) {
  Serial.println("noteOn");
  midiEventPacket_t noteOn = { 0x09, 0x90 | channel, pitch, velocity };
  MidiUSB.sendMIDI(noteOn);
}

void noteOff(byte channel, byte pitch, byte velocity) {
  Serial.println("noteOff");
  midiEventPacket_t noteOff = { 0x08, 0x80 | channel, pitch, velocity };
  MidiUSB.sendMIDI(noteOff);
}

void controlChange(byte channel, byte control, byte value) {
  Serial.println("controlChange");
  midiEventPacket_t event = { 0x0B, 0xB0 | channel, control, value };
  MidiUSB.sendMIDI(event);
}

最後に…

誰かPCDJを私に恵んでください…。

www.amazon.jp

【DJへの道】MixxxをRaspberry Piにインストール

ちぇけら。

ポキオ Raspberry Pi Mixxx PCDJ

どうしてもDJをやってみたい

無性にDJやってみたいわけです。キュッキュして、音楽と音楽をつなげて、ウェーイってやりたいわけです。で、YouTubeを見まくってたら、安価なPCDJなるものを買えば幸せになれるのではと思ったんですが、

決裁が下りず、非常に厳しい状況となっております。とはいえ、DJは全く詳しくないですが、

  • PCとDJソフト
  • モニターとスピーカー用のサウンドカード的なもの
  • MIDIバイス(ハードウェアスイッチ)

このあたりがあれば、DJができるんじゃないかなって勝手に思っています。

まずはPCソフトから

とはいえ、いきなりPCを汚すわけには行かないので、タッチパネル付きRaspberry Piにソフトを導入してみました。

ポキオ Raspberry Pi Mixxx PCDJ

Raspberry Piのセットアップについてはこちら。

relativelayout.hatenablog.com

今回はMixxxというソフトをインストールしてました。

ポキオ Raspberry Pi Mixxx PCDJ

mixxx.org

このDJソフト、フリーソフトなんですね…、恐るべし…。ひとまず、こんな感じでインストールしていきます。

$ sudo apt update
$ sudo apt install mixxx

その上で、スキンデータからタッチパネルのサイズに合わせて画面サイズを調整

$ sudo nano /usr/share/mixxx/skins/LateNight/skin.xml

このファイル内の MinimumSize を800x450くらいに設定。あとはTerminalから mixxx とタイプして起動。

ポキオ Raspberry Pi Mixxx PCDJ

起動するとこんな感じ。

DJソフトして使えるの?

まず思ったのは800x450じゃ小さくて厳しいということ。ただ、ちゃんと音楽をロードして、波形を表示して、BPM表示も出来て、ピッチもシンクできたり、エフェクトも多数。ちゃんと音楽も再生できました。ここまでできが良いと、あとはMIDIバイスをよしなに作っちゃえば、なんとなくDJができそうな気がしています。ひとまずやれるところまでやってみて、ダメだったら諦めるか、PCDJをこっそり買います…。

最後に…

誰かPCDJを私に恵んでください…。

www.amazon.jp

非ランナーだけどソニーのFloat Runを買ってみた

走らないけど、良い。

ポキオ ソニー Float Run

Float Run?

これ。ランニング用のヘッドホンのようなもの。耳をふさがないから外の音を取り込める、というのが特徴。

www.sony.jp

で、これをなんで買ったかというと…。

WFH用のヘッドセットが欲しくて買ったわけです。

Unboxing

いざ開封の儀。

ポキオ ソニー Float Run

本体はこんな感じ。

ポキオ ソニー Float Run

操作系やマイク・充電ポート(Type-C)は右耳側に集結。

ポキオ ソニー Float Run

キャリングポーチがついているのは地味に嬉しいですね。内側はフラッフィー。

ポキオ ソニー Float Run

で、実際に使ってみた

白い部分がスピーカー。耳たぶの裏側に黒い部分が隠れてる。こんな感じで装着できる。

ポキオ ソニー Float Run

「ながら聞き」って良い

耳を塞がないので、耳が圧迫されずに、外の音もナチュラルに聞こえる。これって凄い楽で、それでいてイヤホンからの音も聞こえる。音楽に没入したくはないし、外の音も効きたいケースでは最高で、Web会議には本当にもってこいでした。そして、想像していたよりも音は悪くない。もちろんちゃんとしたヘッドホンと比べるとスカスカな感じはするけど、ちゃんと低音も聞こえていい感じ。作業用BGMを効きながら仕事するくらいなら全く問題ない感じ。

落ちないけど痛くない

ランナーではないですが、Float Runを装着してWeb会議をしながら、階段の上り下りをしたり、部屋の中を動き回っても問題なし。試しにオフィスで走り回ったりしたんですが、全く落ちる気配がない。左右独立ではなく後部のバンドでつながってるので、そのあたりは安心して装着できるのが良いですね。とはいえ、耳をガッチリ固定するタイプでもないので、終日つけっぱなしで仕事をしても苦にならないのが素敵。唯一欠点を上げるとすると、装着したまま椅子の背もたれにもたれかかると、後部のバンドと椅子がぶつかってしまうことくらい。

操作性は微妙

スイッチ類はすべて右耳に集中していて、さらに耳たぶの後ろ側に位置しているので、再生ボタンや曲送りボタンを押す際は、指で耳たぶをどけて操作する必要があるのがアレ。そして、曲送りボタンと音量ボタンが共通のボタンになっていて、イヤホンがどのBluetoothプロファイルでつながってるかで、曲送りになったり音量ボタンになったりする仕様。 お使いのBluetooth機器が機器操作機能(対応プロファイル:AVRCP)に対応していれば 曲送りボタンとしてワークする模様。

helpguide.sony.net

とはいえ

ちゃんとマイクもついててそれなりに音質も良し、とにかく「ながら聞き」スタイルがWeb会議のヘッドセットとして最高だったので、買ってよかったガジェットです。

ペンタブことはじめ

WFHに導入してみました。

ポキオ XP-Pen Deco Fun S

絵を描くわけではないですが

私の周りで業務中にペンタブっぽいデバイスを使ってると思われる方が何人か居て、いつかはペンタブ使ってみたいなと思っていたわけですが。

普通に5000円を切る値段で売ってるのを見つけてしまい、つい購入。

ポキオ XP-Pen Deco Fun S

XP-Pen Deco Fun S

レビューもインプレも悪くなかったXP-Pen Deco Fun Sを購入。

ポキオ XP-Pen Deco Fun S

PCとはUSB接続で、ペンはバッテリーレスなやつ。筆圧レベルは8192段階ということで、素人にはよくわからないですがなんかすごそうです。

ポキオ XP-Pen Deco Fun S

さっそくWFHで使ってみました。

Plug and Playと言いつつも

スペック的にはプラグアンドプレイに対応ということで、ドライバ不要で使えるものと思っていました。

ポキオ XP-Pen Deco Fun S

macOSにつないでパワポでお絵かきしてみると、なんだか筆圧が検知されておらず悩んでましたが…。

ポキオ XP-Pen Deco Fun S

XP-Penの専用アプリを常駐させておけば、ちゃんと筆圧が検知されていました。ちょっと面倒くさいですが、アプリを動作させておく必要がありそうです。

ポキオ XP-Pen Deco Fun S

色々設定できるっぽいですが、とりあえずデフォルトのまま使っています…。

で、使ってみてどうなのか?

実はWindows環境は真のPlug and Play?

acOSはドライバがあったほうが良さそうでしたが、Windows環境ではドライバー不要で筆圧検知が行われていました。すごく楽ちん。

PowerPointは最強メモアプリ?

そして、気付かされたのはPowerPointの偉大さでした。

ポキオ XP-Pen Deco Fun S

日々の詫びパワポ作成に疲弊していてPowerPointなんてなければよいのに、と思うことも多々ありましたが、手書き機能が豊富で、どうでもいい資料の作成や会議中に加筆する際にペンタブが重宝しています。PowerPoint以外にも、Office 365のホワイトボードアプリであったり、Windows(というかMicrosoft?)はペンタブヘイブンなのかもしれません。

Sサイズは丁度いい

今回購入したのはSサイズで、ペンタブとして使えるエリアは6.3インチ✕4インチ。

ポキオ XP-Pen Deco Fun S

正直、絵師になりたいわけではないので大きくて良いヤツじゃなくてもいいですが、小さすぎても扱いづらくて書きづらいと思います。そういう意味ではいいサイズ感で、書きづらいこともないし、机でスペースをとることもない、いい塩梅のサイズです。

Processingことはじめ

アニメーションが作れるぞ!

ポキオ Processing ことはじめ

アニメーションの世界へ

いやー、良い世の中になってきたもので、いろいろな制作活動に対してハードルが下がってきていることを実感します。アニメーション作成に対してもそれが当てはまります。

processing.org

今回は、(今更ですが)Processingでアニメーション作成をしてみました。

まずはインストール

ここから無料でダウンロードできます。

processing.org

macOS/Winの他に、LinuxRaspberry Pi向けにも対応しているのが良いですね。ちなみに私の環境ですが、

MacBook Air (Retina, 13-inch, 2018)

Ver. 11.6.6 Big Sur

Processing 4.2 (macOSIntel 64-bit)

です。

早速起動

スプラッシュ画面が表示され…、

ポキオ Processing ことはじめ

その後にコーディングするエディタ画面が表示されます。

ポキオ Processing ことはじめ

色味こそ違いますが、Arduino IDEにそっくりですね。

processing.org

そして、コーディングのやり方もArduino IDEに似ていて、 setup() 関数内で初期化を行い、その後繰り返し実行される draw() 関数内で描画を行う形です。

とりあえずアニメーションを作ってみました

Processingでコーディングをして、それをPNGでパラパラと1コマずつ出力し、ProcessingでMP4ファイルに変換をかけてみました。まず出来たのもはこちら。

ビールの絵文字が画面中央から溢れ出てくるという動画です。(最後に推しのビアバーのロゴも表示)

やっつけで書いたコードはこちら。(色々と間違ってたらごめんなさい)

PImage image, logo;

int arrayNum = 100;
int[] array = new int[arrayNum];

int fps = 30;
int beerLengthSec = 5;
int logoLengthSec = 3;

void setup() {
  size(720, 720);
  frameRate(fps);
  smooth(8);

  image = loadImage("beer.png");
  logo = loadImage("kakurenbo.jpg");
}

void draw() {
  background(191);

  if (frameCount < beerLengthSec * fps) {
    array[0] = (int) random(1, 360);
  } else if (frameCount < beerLengthSec * fps + arrayNum + logoLengthSec * fps) {
    array[0] = 0;
    showLogo((int) (frameCount - beerLengthSec * fps));
  } else {
    showLogo((int) (frameCount - beerLengthSec * fps));
    noLoop();
    return;
  }

  for (int i = 0; i < arrayNum; i++) {
    showImage(array[i], i);
  }

  for (int i = arrayNum - 1; i > 0; i--) {
    array[i] = array[i-1];
  }

  saveFrame("frames/######.png");
}

void showImage(int angle, int time) {
  if (angle == 0) {
    return;
  }

  float distance = pow(time, 1.4);
  float size = pow(time, 1.25);

  image(image, width/2 + distance * cos(radians(angle)) - size/2, height/2 + distance * sin(radians(angle)) - size/2, size, size);
}

void showLogo(int time) {
  float size = pow(time, 1.4);

  if (size > width) {
    size = width;
  }

  image(logo, width/2 - size/2, height/2 - size/2, size, size);
}

Arduino IDE同様に、CやJavaに近いコーディングで実装が出来ます。リファレンスを見ながら実際に使ったクラス・関数はこちら。

PImageクラス

PImage / Reference / Processing.org

外部の画像ファイルを取り込んで使えるクラス。loadImage()で外部ファイルを取り込み、image()で表示が可能。

size()

size() / Reference / Processing.org

ディスプレイサイズの設定。ここで設定したサイズが、Processing実行時のWindowサイズになります。

ポキオ Processing ことはじめ

frameRate()

frameRate() / Reference / Processing.org

文字通り、フレームレートをFPSで設定可能。

smooth()

smooth() / Reference / Processing.org

アンチエイリアシングの設定っぽいけど、よくわからない。

background()

processing.org

背景色の設定。すでに何かが描画されていても、その上から塗りつぶしも可能。

noLoop()

noLoop() / Reference / Processing.org

描画を止めるための関数。再開する場合は loop() を呼ぶ。

saveFrame()

saveFrame() / Reference / Processing.org

現在表示中のフレームをファイル出力する。 saveFrame("frames/######.png"); のように指定すると、複数枚出力時に連番で出力してくれる。連番で出力した画像をあとからまとめて動画ファイルに変換してくれるMovie Maker機能もある。

Tools / Processing.org

というわけで

こんな感じで、Arduino IDEを触ったことがあるひとなら、なんとなく動画を作成することができそうなIDEでした。マウスやキー入力を受け付けたりすることもできるので、ユーザー操作に対してインタラクティブな映像表現ができそうです。私も一通りの関数・クラスをおいおい試してみようと思います。

Nintendo Switchのスクショ共有方法がエグかった件

結構力技。

ポキオ Nintendo Switch Wi-Fi

みんな大好きNintendo Switch

家族の全員がポケモンSVに時間を溶かしていますが、皆様はいかがでしょうか。

推しはナンジャモで、ついついスクショをとりがちです。

そのスクショなんですが、Nintendo Switchからスマホに転送する方法がかなりトリッキーだったので、気になる部分をメモしながら共有します。

Nintendo SwitchがAPになる

(ゲームしすぎなのはおいておいて、)撮影したスクショは下段のアルバムに保存されています。

ポキオ Nintendo Switch Wi-Fi

こんな感じでスクショがずらりと並んでいますね。(スクショ撮りすぎ。)

ポキオ Nintendo Switch Wi-Fi

繰り返しますが、ナンジャモは可愛い。

ポキオ Nintendo Switch Wi-Fi

このご尊顔をAボタンから共有ができます。

ポキオ Nintendo Switch Wi-Fi

SNSへの投稿もできますが、今回は「スマートフォンへ送る」というのを選びます。

ポキオ Nintendo Switch Wi-Fi

10枚まで複数枚選択できる仕様のようですが、今回は1枚だけ送ります。

ポキオ Nintendo Switch Wi-Fi

すると(1つ目の)QRコードを読んでね、画面に遷移します。実はこの裏ですごいことが起こっています。

ポキオ Nintendo Switch Wi-Fi

このタイミングで、Nintendo SwitchWi-Fiのアクセスポイントとして機能し始めます。そしてQRコードに接続に必要なSSIDやPWなどの情報が書かれていて、QRコードを読み取ったスマホNintendo Switchに接続できるようになるというもの。

github.com

もう少し噛み砕いていくと、QRコードに書かれるデータの記述方法として、Wi-Fiの用のお作法があります。実際にNintendo Switch上に表示されているQRには、

WIFI:S:(Nintendo Switch APのSSID);T:WPA;P:(Nintendo Switch APのPW);;

こんな感じで書かれています。SSID・PWに加えて、セキュリティ方式(Nintendo SwitchはWPA)も指定されています。SSID・PWはランダムな文字列のようですが、見た感じ固定の文字列のようで、毎回変わるようなことはなさそうです。

そして、このWi-Fi情報が載ったQRコードは最近のスマホOS(というかQRリーダーアプリ)ではちゃんと解釈をしてくれるようで、読んだ瞬間にWi-Fiに接続するかどうかを聞いてくれます。そこからWi-Fi接続(切り替え)ができるようになっています。

コンテンツはWebページ上

さて、1つ目のQRコードを読んでWi-Fi接続ができると、Nintendo Switch上のQRコードは2つ目のものが表示されます。

ポキオ Nintendo Switch Wi-Fi

2つ目のQRコードにはシンプルに下記のようなデータが書かれています。

http://192.168.0.1/index.html

あるサイトのURLのようですが、これはまさしくNintendo Switch上にWebページ(サーバー)があり、そこへアクセスするためのURLになってます。

ポキオ Nintendo Switch Wi-Fi

URLをWebブラウザでアクセスすると、先程共有したナンジャモの画像がページ上に表示され、それを長押しして保存するなんとも古風な仕組みになっています。

細かいですが、SではないHTTPなページなので、ブラウザ上で怒られますが、まぁ良しとしましょう。

ということで

Nintendo Switchからスマホへのスクショ共有方法について観察してみました。極力スマホの設定をユーザーにさせず、QRコードを読むだけという簡単操作に徹底している部分が、任天堂のUXへのこだわりが感じられますが、技術的にはなかなかエグいことをしていました。ただ、いろんなOSや今後のOS仕様を吸収できるような仕様を考えると、必然的にこのような仕様にならざるを得なかったような気もします。

ポキオ Nintendo Switch Wi-Fi

さて、レイドバトルに行ってきます。

Twitter API有料化の件

ついに。

ポキオ Twitter API 有料化

Node-REDでTwitter Bot的なことをしていました

去年からそういうことをやっていました。

relativelayout.hatenablog.com

内容は非常にくだらないことで、

定期的に暴言を吐くなどをしていました。特に力を入れていたのは京急の運転見合わせ回数のカウント。

去年は実に37回の運転見合わせがありました。(※すべてが人身事故が原因というわけではないです)

ポキオ Twitter API 有料化

わりと真面目にロジックを組んだりしていました。

突然の有料化

まだ詳細はわかりませんが、

Starting February 9, we will no longer support free access to the Twitter API, both v2 and v1.1. A paid basic tier will be available instead 🧵

というわけで、おそらくTwitter APIが有料化されそうな雰囲気。定型文ですが、私のお気持ちはこんな感じ。

おそらくNode-REDのTwitterノードも無課金ユーザーは使えなくなりそうなので、今まで作ったBotとはお別れをしなければならなそうです。

でも、これって当然の流れ

個人的にはTwitter APIをこれからも無料で使いたかったですが、

  • API維持にはお金がかかる
  • ChatGPTなどが普及すると、更にBotが増えてTwitterがカオスになる

みたいなこともあり、有料化するのはあながち間違ってはいない気がします。とはいえ、身近なDXとして丁度いい場であったTwitterが気軽に利用できなくなるのは残念ですね。今後は別のやり方を考える必要がありそうですね…。

「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。