Apacheログ "%U%q" のパス出力は"%r"と互換性が無い
AcceptPathInfoがOffになっているような、標準とは違うApache環境下で動く不幸なCakePHPで、公開ディレクトリに書かれる.htaccessによるmod_rewite規則
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule>
という奴を使うと、例えば http://example.com/top/ というURLにアクセスすると、Apacheのカスタムログフォーマットでいうと、
%r: GET /top/ HTTP/1.1 %U: /top/ %q: ?url=top/
となり、
%U%q: /top/?url=top/
となります。/top/
になってほしいのに、内部rewrite処理で生成された?url=top
が付いてしまうのです。redirect_logはこんな感じ。
(3) [perdir /var/www/html/] add path info postfix: /var/www/html/top -> /var/www/html/top/ (3) [perdir /var/www/html/] strip per-dir prefix: /var/www/html/top/ -> top/ (3) [perdir /var/www/html/] applying pattern '^(.*)$' to uri 'top/' (4) [perdir /var/www/html/] RewriteCond: input='/var/www/html/top' pattern='!-d' => matched (4) [perdir /var/www/html/] RewriteCond: input='/var/www/html/top' pattern='!-f' => matched (2) [perdir /var/www/html/] rewrite 'top/' -> 'index.php?url=top/' (3) split uri=index.php?url=top/ -> uri=index.php, args=url=top/ (3) [perdir /var/www/html/] add per-dir prefix: index.php -> /var/www/html/index.php (2) [perdir /var/www/html/] trying to replace prefix /var/www/html/ with / (5) strip matching prefix: /var/www/html/index.php -> index.php (4) add subst prefix: index.php -> /index.php (1) [perdir /var/www/html/] internal redirect with /index.php [INTERNAL REDIRECT]
fluentdのログ転送で使うLTSVフォーマット指定で、パスの表記に%U%q
で指定している例が多いので、通常のApacheログとfluentdで収集したApacheログで表記が食い違うことに……
fluentdでApacheログをLTSVで出力している人は注意が必要です……
ここで唐突にApache CustomLog書式の確認
http://httpd.apache.org/docs/2.2/ja/mod/mod_log_config.html
フォーマット文字列 | 説明 |
---|---|
%q | 問い合せ文字列 (存在する場合は前に ? が追加される。 そうでない場合は空文字列) |
%r | リクエストの最初の行 |
%U | リクエストされた URL パス。クエリ文字列は含まない |
修飾子
(略)
修飾子 "<" と ">" は内部リダイレクトされたリクエストのログに 元のリクエストか最終的なリクエストのどちらを使用するかを 指定するために使います。デフォルトでは、% ディレクティブの %s, %U, %T, %D, %r は元のリクエストを、他は最終的なリクエストを 使用します。例えば、リクエストの最終ステータスを記録するには %>s を、内部的に認証されていないリソースへリダイレクトされた リクエストで元のリクエストで認証されたユーザを記録するためには %<u を使うことができます。
LogFormatで%U%<qすればいいじゃない
効かないんだなーこれが
fluentdでの解決法
解決法はQiitaに書く(要fluentd v0.12以降)→書いた
74HC4511で7セグLチカ(Arduino Pro Mini 5V使用)
7セグメント表示器の点灯専用に作られたICのうち、今回は、カソードコモン7セグメントLED用デコーダIC・74HC4511を使った回路をArduino Pro Miniで駆動してみます。
最初に書いておきますが、マイコン(Arduinoみたいなプログラムでピン出力が自由に変えられるもの)を使っている場合、7セグ専用デコーダを使う意味はほとんどありません!
74HC4511は、2進4桁のBCDを入れてあげることで、その数値に対応したLED点灯パターンの出力が得られる便利なICです。自分で0~9の点灯パターンを作る必要が無いってことになります。
部品リスト
価格は執筆時点での価格(税込)です。 ※利用するArduinoの価格は除外しています。
akizukidenshi-ogp-injector.dtpwiki.jp
akizukidenshi-ogp-injector.dtpwiki.jp http://akizukidenshi.com/catalog/g/gK-06656/
akizukidenshi-ogp-injector.dtpwiki.jp
akizukidenshi-ogp-injector.dtpwiki.jp
akizukidenshi-ogp-injector.dtpwiki.jp
akizukidenshi-ogp-injector.dtpwiki.jp
akizukidenshi-ogp-injector.dtpwiki.jp
実体配線図
5VのArduino Pro Miniを使っています。
黄色い線でArduinoからBCD(二進化十進表現、要は二進数4桁で0~9までをあらわす)を4ピンを使って74HC4511に入力します。白い線は74HC4511からの出力で、そのままだと7セグメントLEDに過大な電流が流れるので、左右に引き出した470Ω抵抗で電流を弱めて、7セグメントLEDのアノード(入力)に入れます。
Arduino用プログラム
const int pins[] = { 2, 3, 4, 5, }; void setup() { for ( int i = 0; i < 4; i++ ) { pinMode( pins[i], OUTPUT); } } void loop() { for ( unsigned int i = 0; i < 10; i++ ) { for ( int j = 0; j < 4; j++ ) { int d = LOW; if ( (i & 1 << j ) ) { d = HIGH; } digitalWrite( pins[j], d); } delay(600); } }
実際に作ってみた後、重大な欠点に気づきます。
- 74HC4511単体では7セグメントLEDの小数点の点灯に対応していない
- Arduino側から見ると、BCD出力に4ピン、小数点を使う場合はさらに1ピンの合計5ピンを消費することになり、ピンの節約の観点では、あまりおいしくない
- 7セグメントLEDの点灯パターンはICに初めから設定されている。点灯パターンが気に入らなくても変更できない
東芝の74HC4511のマニュアルから引用ですが6,7,9の点灯パターンに違和感覚える人いるんじゃないかと思います。
いろいろまとめると、マイコンを使うのなら、74HC5411の代わりにシフトレジスタIC(74HC595みたいなの)を使うと3ピンでピリオドまで含めた7セグメント表示器点灯パターンが簡単に作れるので、そっちのほうがよいです。
汎用ロジックの7セグメントデコーダ・ドライバというのは、どちらかというと回路の中にマイコンが無くて、電子回路と汎用ロジックのみの構成で7セグメントLEDを表示に使いたいときに使いましょう。
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
- クリック: 4回
- この商品を含むブログ (1件) を見る
FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
- この商品を含むブログを見る
LED18チカをArduino Uno→Pro Mini→ATmega328で作る
みんなArduinoのことを「高い、高い!」と言うのだけれども、Arduinoでの開発の目標をATmega328で作ることにすると安くなるよー、ていうのをやります。
Arduino Unoによる18LEDチカ
現在標準的なArduinoとされているArduino Unoで18個のLEDによるLチカをします。
部品リスト
価格は執筆時点での価格です。基本的に秋月電子通商通信販売で購入できるパーツを選定しています(送料に注意)。大田区から秋葉原に行くと運賃が送料よりも高くなるのでビバ通販、ヤマト運輸バンザイです!
部品名 | 価格(税込) |
---|---|
ブレッドボード EIC-102J ジャンプワイヤー付 | 600 |
ブレッドボード・ジャンパーコード(オス-オス)セット | 220 |
ブレッドボード用マイクロBメスUSBコネクタDIP化キット | 200 |
USBケーブル Aオス-マイクロBオス 1.5m A-microB | 120 |
カーボン抵抗(炭素皮膜抵抗) 1/4W 470Ω (100本入) | 100 |
小型赤色LED BR2222S(200個入) | 200 |
Arduino Uno Rev3 | 2,940 |
------------- | ---- |
計 | 4,380 |
akizukidenshi-ogp-injector.dtpwiki.jp
akizukidenshi-ogp-injector.dtpwiki.jp
akizukidenshi-ogp-injector.dtpwiki.jp
akizukidenshi-ogp-injector.dtpwiki.jp
akizukidenshi-ogp-injector.dtpwiki.jp
akizukidenshi-ogp-injector.dtpwiki.jp
プログラム
const int pins[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, A0, A1, A2, A3, }; void setup() { for ( int i = 0; i < 18; i++ ) { pinMode( pins[i], OUTPUT); } } void loop() { for ( int i = 0; i < 18; i++ ) { digitalWrite( pins[i], HIGH); delay(100); } for ( int i = 0; i < 18; i++ ) { digitalWrite( pins[i], LOW); delay(100); } }
ブレッドボード上での実体配線図
この配線では、電源はブレッドボードに配置してあるMicroUSBから取り、Arduino側には電源をつなぎません。Arduinoの5VピンにUSBのVBUS(5V)、GNDピンにUSBのGNDをつなげてあげることで、Arduinoが動きます。
Arduinoへプログラムを転送する場合は、安全のためブレッドボード側のUSBケーブルはいったん外しましょう。
プログラムを転送してLチカが確認できたら、ArduinoのUSBケーブルを外し、ブレッドボード側のMicroUSBコネクタに電源を供給し、PCが無くてもLチカが動くことを確認できればOKです。
作例
Arduino Unoは持っておらず、その前のバージョンのArudino Duemilanoveで作例となります。
Arduino UnoをArduino Pro Miniに置き換えて18LEDチカ
ブレッドボード上でプロトタイピング(試作品を作ること)するためのArduino Pro Miniで、実際にブレッドボード上でプロトタイピングしてみました。
Arduino Pro Miniは、Arduino Unoなどで使われているMCU、ATmega328の表面実装タイプが使われており、標準的なArduinoで作られたアプリケーションのArduino部分を置き換える用途に最適です。
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
- クリック: 4回
- この商品を含むブログ (1件) を見る
ただし、小型化するために、PCとのUSB通信を担う部分はオミットされていますので、試作中は、別途FTDI USBシリアル変換アダプターなどを使って、プログラムを転送する必要があります。
FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
- この商品を含むブログを見る
アプリケーションとして完成してしまえば、通信アダプターの部分を取り外して、そのまま実用使用してもよいです。
部品リスト
価格は執筆時点での価格です。なお、秋月電子には純正のArduino Pro Mini 5Vが売っていなかったので、スイッチサイエンスからの調達となります。
部品名 | 価格(税込) |
---|---|
ブレッドボード EIC-102J ジャンプワイヤー付 | 600 |
ブレッドボード・ジャンパーコード(オス-オス)セット | 220 |
ブレッドボード用マイクロBメスUSBコネクタDIP化キット | 200 |
USBケーブル Aオス-マイクロBオス 1.5m A-microB | 120 |
カーボン抵抗(炭素皮膜抵抗) 1/4W 470Ω (100本入) | 100 |
小型赤色LED BR2222S(200個入) | 200 |
Arduino Pro Mini 328 5V 16MHz | 1,243 |
FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き) | 1,512 |
------------- | ---- |
計 | 4,195 |
ブレッドボード上での実体配線図
作例
Arduino Pro MiniをATmega328に置き換えて18LEDチカ
Arduinoを使った工作の最終目標の一つとして、ArduinoをATmega328に置き換えてしまうというものがあります。だって、みんな「高い、高い」と言っているArduinoですが、工作ごとに3,000円ぐらいするArduino製品を組み込んでいたら、そりゃあ高いですよね。一方、ArduinoではなくてATmega328を使えば、250円で済んじゃいます。
なお、Pro MiniからATmega328に置き換える場合は、GPIO11ピンから13ピン(SPIで使うピン)の位置が同じ位置になるように置き換えると置き換えがしやすいです。
プログラムの書き込みについて
ATmega328をArduino化してプログラムを書き込む方法は複数ありますが、別のArduinoに書き込み用プログラムを書き込んで、それを使ってATmega328に書き込む方法もあります。
「びんぼうでいいの」に生AVRマイコンを載せたままArduino化(ICSP) - M.C.P.C. (Mamesibori Creation Plus Communication)
なお、ATmega328のArduino化する場合、「8MHz(内部RC発振)」というモードで書き込むと、余計なパーツが必要なくなるのでお勧めです。
部品表
部品名 | 価格(税込) |
---|---|
ブレッドボード EIC-102J ジャンプワイヤー付 | 600 |
ブレッドボード・ジャンパーコード(オス-オス)セット | 220 |
ブレッドボード用マイクロBメスUSBコネクタDIP化キット | 200 |
USBケーブル Aオス-マイクロBオス 1.5m A-microB | 120 |
カーボン抵抗(炭素皮膜抵抗) 1/4W 470Ω (100本入) | 100 |
小型赤色LED BR2222S(200個入) | 200 |
AVRマイコン ATMEGA328P-PU | 250 |
積層セラミックコンデンサー0.1μF10個入2.54mm | 100 |
------------- | ---- |
計 | 1,830 |
※これものすごいマジックが含まれていて、ATmega328を書き込むための機材の値段が入っていないことに注意! でも、ATmega328の書き込みには、Arduino UNO/Arduino Pro MiniなどのArduinoとして動いている製品が利用できます(この過程に進む人は当然持っているはずなんで……)。
ブレッドボード上での実体配線図
ATmega328のDIP版は、28ピンの300milパッケージとなっていて、表面実装パッケージを使っているArduino Pro Miniよりも専有面積は小さい。実はATmega328でArduino Pro Miniの機能のほとんどを持っているのです。では、Arduino Pro Miniの基板上では何をやっているのかといえば、安定した電圧の電源の生成、セラミック発振子によるクロックの提供、リセットスイッチの実装などです。これらをオミットしたり別回路で解決できれば、ATmega328に置き換えることができます。
今回の場合は、リセットスイッチとセラミック発振子をオミット、定電圧電源はUSBコネクタからの定電圧5V電源の供給、となり、置き換えられる条件がそろったことになります。
ATmega328のVCCとGNDの間に配置している積層セラコン0.1μFは、おまじないのバイパスコンデンサ(パスコン)ですが、これがないとノイズで動作が狂ってくることがほんとによく発生するので、兎に角これをやっておくことをお勧めします。
作例
まとめ
- Arduinoのシールドが使えるタイプは、シールドを使ったり作ったりするときに使おう
- ブレッドボード上で試作するときは、ブレッドボード上に載せる用途で作られているArduino Pro Miniを使おう
- 試作してうまく動いたら、ATmega328に置き換えてみよう
番外編
Intel Edison kit Arduinoでもやってみました。
この場合、Intel Edison kit for Arduinoの5Vに外部から電圧を入れても、Edisonは稼働しません!
作例の場合、ブレッドボード側のMicroUSBコネクタを外して、Edison側から給電しています。
Intel Edisonのセットアップスクリプト・時刻合わせ関係をまとめた
切手大(よりちょっと大きい)のLinuxが動くミニデバイスIntel Edisonをいろいろいじってみているんですけれども、もうちょっとしたら秋月電子のI2Cデバイスのライブラリが出るとか出ないとか聞いたので盛り上がりそうな気もするんだけれども、採用されたLinuxのYocto Projectのブートイメージのプロセス起動マネージャがSystemdなんですね!
おそらくIntel EdisonでSystemdっていうのはブートの高速化っていう意味でアリなんだと思うんですけれども、そのせいで昔のLinuxと勝手が違ったりするような気がします。そういう意味で、今時のやり方、とは言いませんけれども、ちょっと調べてまとめてみた次第です。
Intel Edisonの初期化後 毎回セットアップする作業をひとまとめ - Qiita
Intel Edisonの時刻合わせ(systemd-timesyncd,timedatectl) - Qiita
やっぱSystemdがいろいろ抱え込んだせいで今までのネットにある情報流用の勘所がわかりにくくなっているんだよなーとか思います。
会社だと運用人員の関係でCentOS 7とかにはできない感じなので、この機会にSystemdに慣れておこうと思っています。つかこの前CentOS 6のUpstart教えたばっかりだよ……
はじめての8pin IC Lチカ(タイマIC 555使用編)
8pinのICが手に入ったので、早速LEDをチカチカさせる、略してLチカを実行してみました。
使ったのは8pin AVRマイコンとかではなく、タイマIC 555です。昔バックアップ活用テクニックで555を使用した連射回路とか書いてあっても地方だと入手できなくて涙をのんだアレです。ここで雪辱を果たしましょう。
回路に関しましては、マルツ様のページを参考にしました。
部品表としては、
部品名(秋月電子通商) | 価格(税込) |
---|---|
タイマIC NE555N 5個入り | ¥100 |
3mm黄緑色LED OSNG3133A 100個入 | ¥450 |
積層セラミックコンデンサ 0.1μF 10個入り | ¥30 |
積層セラミックコンデンサ 0.01μF 10個入り | ¥100 |
積層セラミックコンデンサ 0.47μF 1個 | ¥20 |
抵抗 1MΩ 1/4W 100本入り | ¥100 |
抵抗 150Ω 1/4W 100本入り | ¥100 |
ブレッドボード | ¥130 |
電池ボックス 単3×3本 端子Bスナタイプ | ¥50 |
配線 適量 | ありもの |
積層セラミックコンデンサの0.1μFは、パスコン用途で鬼のように使うので、ものすごく安いです。あと、LEDは、たくさん入っていて暗くて安い奴のほうが燃えてもダメージ低いのでお勧めです……
部品名(マルツ) | 価格(税別) |
---|---|
電池スナップ(先がピンになっているもの) | ¥60 |
電池スナップから出ているコネクタの先がコンタクトピンになっているタイプはマルツの店頭で売っていたのですが写真のようにブレッドボードに刺せるので、こちらのほうがお勧めです……
なお、555の1ピン・GNDと8ピン・VCCにまたがって配置されている0.1μFのコンデンサはノイズ除去用のパスコン、5ピンとGNDにまたがって配置されている0.01μFのコンデンサは、555のタイマの出力を別の信号に応じて揺らすときに使う入力を一定にするためものなので、これらはLチカのようにすぐにほぐしてしまう回路ならば実質不要で、外してしまうとこんな感じです。
何はともあれ、これに3.6V電源を入れてあげると、普通に点滅し始めます。
点滅間隔や周期を変えるには、コンデンサと抵抗を変更する必要があります。それに関してはアナログ回路の単純さというか面倒くささがありますけれども、ICの動作電圧範囲が広いので、例えば12VのDCファンの速度を下げる時にタイマICを使い電流が流れる比率を変えて制御するときの、矩形波の発生源として簡単に投入できるなど、メリットもあります。
一方、マイコンを使うと、動作電圧が限定されるというデメリットがありますが、点滅の速さはプログラムで自由に変えられます。別の機会に、同じ8pinのICでもマイコンであるATtiny 13Aを使って、プログラムでLチカするやつをやってみたいと思います。
「びんぼうでいいの」に生AVRマイコンを載せたままArduino化(ICSP)
aitendoで売っている500円Arduino互換機基板「びんぼうでいいの」、プラス250円でそれ用の汎用部品パック、さらにそのまま秋葉原に歩いて行って秋月電子で生のATmega328(まだプログラムを焼いていないAVRマイコン部品)を買い合わせると1000円ちょい(秋月は税込みだけどaitendoが税抜なのだ)でArduino Uno互換機(ただし魂が入っていない)ができます。
AVRマイコン ATMEGA328P−PU: マイコン関連 秋月電子通商 電子部品 ネット通販
ところで、生のATmega328を買った場合、どうにかしてArduinoとして動くようなプログラムを書き込む必要があって、それをする方法として、すでに動いているArduinoマシンにOptifixというスケッチを書き込んで、Arduino複製機にしてしまうというやり方がメジャーです。
「びんぼうでいいの」を販売するaitendoでも、Optifixを使ってATmegaに書き込みする方法を提示しているのですけれども、なにやら書き込むためにブレッドボードで書き込み回路(実は16MHzのクロック供給回路)を用意するなど大掛かりなことになっています。
16MHzの水晶振動子のところを16MHzのコンデンサ内臓セラロックにすれば35円程度という話なのですが、もう一回秋月電子に行くのは大変です。
セラミック発振子(セラロック)コンデンサ内蔵タイプ 16MHz: パーツ一般 秋月電子通商 電子部品 ネット通販
というか、目の前にArduino互換基板「びんぼうでいいの」があるなら、それで書き込みできたらいいじゃないか、ということであります。
ICSP端子を使おう
AVRマイコンを使った製品を、製品に組み込んだ後からでも書き込みできるように、ICSP端子というものが用意されていたりします。
"Icsp-pinouts" by Jwzumwalt - Own work. Licensed under CC BY-SA 3.0 via Wikimedia Commons.
そこで、手元のブツを見たれば、
- 書き込み用プログラムを書き込もうと思っていた手持ちのArduino DuemilanoveにはAVRスタイルの6ピンのICSP端子
- 「びんぼうでいいの」にもAVRスタイルの6ピンのCSPとシルク印刷されたランドパターン
がありました。
※現行Arduinoでは標準品となるArduino UnoR3では、USB側にICSP2なる6ピンヘッダが出ていますが、UnoはUSBの通信とATmega328の書き込みを担当するサブAVRマイコンATmega16U2がUSB近くに配置されていて、それの再書き込み用ICSP端子(普通は使わない)です。
ICSP端子は、書き込まれる用途に使われるのですが、Optifixスケッチ(プログラム)では、書き込む側でも、ICSP端子のうち第5ピンのRSTを除く5つのピンが共通して使われていました。
そこで、「びんぼうでいいの」の空きパターンに、ピンヘッダ(別売り)をはんだ付けして端子を建てて、利用できるようにした後、1~4ピン、6ピンは同じピン番号同士を接続、書き込み先の基板のICSP端子5ピンは、書き込み元のArduinoのD10端子につなぎます。
あとは、aitendoの商品ページに書いてある通り、転送元のArduinoに(ヘッダ記述を修正済みの)Optifixを書き込むと、転送元のArduinoに書き込み終了後「いきなり」ICSPで接続した書き込み先の基板上のAVRマイコンにArduinoのブートローダ―プログラムを書き込みます。
というわけで、ICSP端子を使えば、AVRマイコンのArduino化にわざわざ部品を集める必要はないよ、ていうことでした。
追記
新製品出てた! 水晶振動子がはんだ付けされていないから自由に速度選べるだそうで。
追記2
勘のいい人は気づいたかもしれませんが、びんぼうでいいの部品パックには、USBASP用の10ピンのボックスヘッダが付いてきますので、ここに対応する位置を合わせて接続すれば、ICSPのところにピンヘッダを建設する必要はありません。結局ピン対応図を見比べて配線するのであれば、そっちで書き込むほうが余計なコストがかからずいいのかもしれません。
追記3
勘のいい人は気づいたかもしれませんが、書き込み側ArduinoのスケッチをOptifixではなくてArduino ISPにすると(Arduino IDE環境に含まれている)、別のブートローダーを書き込めます。なので、「びんぼうでいいの」で開発が終わったATmega328をブレッドボードや基板などに移して使うために内蔵RC発振8MHz化したい(水晶振動子が要らない)、という場合にも「びんぼうでいいの」に載せたままATmega 328(Int.8MHz)のブートローダーを焼き、更に動作確認済みのスケッチも転送できます。
#gotandapm #3でLTしてきた
会社の近くでGotanda.pm #3があったので、行ってきたよ。
テーマがAPIだったので、WebAPIで最近あった事件をライトニングトークしてきました。
プレゼンは
使った小道具はATtiny85で作ったArduinoのサブセット(書き込み方法は Arduino Pro Mini 328 3.3Vを8ピンAVRマイコン書き込み専用ISPにする - M.C.P.C. (Mamesibori Creation Plus Communication))
もはやArduinoですらない……
曲げセンサーを曲げないと白、
曲げセンサーを曲げると赤、
マイコンでプログラムしているのでFPSとかないのでぬるぬる変わるよ!
#include <Adafruit_NeoPixel.h> #define RGBREDPIN 2 #define SENSORPIN A3 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(1, RGBREDPIN, NEO_GRB + NEO_KHZ800); void setup() { pinMode(SENSORPIN, INPUT); pixels.begin(); } void loop() { int a = analogRead(SENSORPIN); int c = a - 450; if ( c < 0) { c = 0; } else if ( c > 255) { c = 255; } delay(10); pixels.setPixelColor(0, pixels.Color(255-c, 255 ,255-c)); pixels.show(); }
皆さんお疲れ様でした!