京セラ feelH” Treva カメラ
2022.08.12
YouTube でも紹介しています。画像をクリックすると再生できます。
今回は、京セラのデジタルカメラユニット「Treva」を使ってデジタルカメラを作ってみました。
■feel H"端末専用の小型デジタルカメラユニット 「Treva(トレバ)」
2000年9月22日,DDIポケットはデジカメを装着できるPHS「feel H"」を発表。
左側の写真は三洋電機のfeel H"端末「Leje」で、携帯の左下に移っているのが,右側の写真、京セラのデジタルカメラユニット「Treva」です。
同月28日にはDDIセルラーグループと日本移動通信(株)は、cdmeOne携帯電話向けのデジタルカメラ『PashaPa』(パシャパ)を発表しています。
今回は先人により仕様が解明されているTreva(トレバ)をメルカリで送料込み350円で購入しました。
携帯に外付けカメラ?とふと思って調べてみると、最初のカメラ付き携帯は2000年、J-phone(現在のソフトバンクモバイル)の SHARP「J-SH04」という機種だそうです。
この時期、カメラ付き携帯電話はまだ誕生期にあたり、外付けカメラのTrevaも画期的なものでした。
その後、カメラ付き携帯は2003年末には200万画素、2006年中旬には500万画素と進化を遂げていき、外付けカメラは市場から消えていきました。
■Treva(型番:HC-D01)の主な仕様
製品名 |
HC-D01 「Treva」 |
撮像素子 |
1/4型CMOSセンサー |
画像出力サイズ |
横96×縦72ピクセル |
レンズ |
固定焦点(撮影距離範囲:30センチ~無限遠) |
露出・ホワイトバランス |
自動 |
インタフェース |
2.5ミリ4ピンプラグ |
電源 |
端末から供給 |
本体サイズ |
約30(幅)×16(高さ)×32(厚さ)ミリ |
重量 |
約10グラム |
いまでは信じられないほど貧相な解像度です。でも当時は画期的だったのでしょう?
焦点が30cmからとありますが、5cmの距離でも焦点が合います。
なお、この解像度は左の写真のようにミニジャックを横にした場合の解像度です。
■カメラモジュールの作成
使いやすいようにカメラモジュールの形に作り替えます。
白いキャップを外すと、ちょっと特殊な4極2.5mmのミニジャックが現れます。
このミニジャックに対応しているソケットが見つかりませんので、直接配線を引き出すことにします。
ミニジャック両脇のフックをマイナスドライバーで押し込んで、蓋を開けます。
クロック信号がピンク色の線、データ信号が黄色の線 GNDが黒線、3.3Vが赤線です。
ニッパーを用いて、ミニジャックにハンダ付けされているこの4線を切断します。
4本の線の先端の剥がしてちょっとだけ導線を剝き出しにします。
次にユニバーサル基板を用意して、L字型ヘッダーピンをハンダ付けします。
先程の4線をユニバーサル基板の穴に通して、裏側からハンダ付けします。
Trevaを両面テープを使って基板に固定すれば、シリアルカメラモジュールの完成です。
基板に固定することで、細い線が断線する心配もありません。
ブレッドボードに挿すとこんな感じになります。
■開発環境・構成図
ノートパソコンから、TeraTermによりラズベリーパイにSSH接続して操作します。
3.3V 動作で、マイコンからクロックを供給し、Treva からのシリアルデータを読み込みます。
■Adafruit QT Py ESP32-S2 WiFi Dev Board with STEMMA QT
QT Py ESP32 -S2にはシングルコアの240MHzチップが搭載されているため、デュアルコアのESP32ほど高速ではありませんが、
4MBのフラッシュと2MBのPSRAMを実装しているため、データ解析などに必要なメモリー空間を確保することができます。
●Same size, form-factor, and pin-out as Seeed Xiao
●ESP32-S2 240MHz Tensilica processor
●4 MB Flash & 2 MB PSRAM
●Built-in RGB NeoPixel LED
●2.4 GHz Wi-Fi System-on-Chip (SoC)
●13 GPIO pins:
●11 on breakout pads, 2 more on QT connector
●10 x 12-bit analog inputs (SPI high speed pads do not have analog inputs)
●8-bit analog output DAC
●PWM outputs on any pin
●Two I2C ports, one on the breakout pads, and another with STEMMA QT plug-n-play connector
●Hardware UART
●Hardware SPI on the high speed SPI peripheral puns
●Hardware I2S on any pins
●5 x Capacitive Touch with no additional components required
●3.3V regulator with 600mA peak output
●Reset switch for starting your project code over, boot 0 button for entering bootloader mode
Ref.Adafruit QT Py ESP32-S2
■Qt Py Pinout
QT Py ESP32-S2 の詳細は下記をご覧ください。
Adafruit QT Py + XIAO Expansion board
■Adafruit 1.14" 240x135 Color TFT Display + MicroSD Card Breakout - ST7789
The TFT driver (ST7789) is very similar to the popular ST7735, and our Arduino library supports it well.
There was a little space so Adafruit placed a microSD card holder so you can easily load full color bitmaps from a FAT16/FAT32 formatted microSD card. (GREENTAB)
Adafruit の MicroSD Card スロット付ディスプレイですが、SDカードから画像を読み込んで表示するには問題ないのですが、
SDカードに書き込みを行おうとすると、表示が固まってしまいます。
There was a little space so Adafruit placed a microSD card holder so you can easily load full color bitmaps from a FAT16/FAT32 formatted microSD card.
loadとはありますが、saveとは記載がないので、表示中の書き込みは苦手?なのかもしれません。
そこで、別途SDカードモジュールを用意します。
■microSDカードスロット レベルシフタ付きブレークアウト基板キット
ESP32は、3.3V駆動なのでレベルシフタ付きモジュールは必要ないのですが、手元にあったのでこれを使用します。
microSDカードスロットに、レベルシフター(74HC4050)とボルテージレギュレータ(3.3V)を付加して、Arduino等の5V系回路へ直結。
販売:秋月電子通商
Arduino とは、5V,GND,SCL,MISO,MOSI,SS(計6本)を接続し、
ジャンパJ1をショート(はんだを盛って接続)して使用します。
SDカードの電源On/Off制御を行う場合は、ジャンパJ1をショートせず、[2]ピンを空いているデジタルピン(出力)に接続し、
スケッチ上より制御します(HIGHで電源ON)。
SDカード検出スイッチを使用する場合は、[9]ピンを空いているデジタルピン(入力)に接続し、
スケッチ上で読み取ります(検出時にLOW)。
■配線
RASPBERRY PI | - | QT Py | - | |
USB | - | USB | | |
ST7789 | | | | micro SD |
TFTCS | - | [0]A0 | | |
DC | - | [1]A1 | | |
RST | - | [2]A2 | | |
| | [3]A3 | | [8]SDカード チップセレクト(CS)) |
LIT | - | [6]A6(TX) | | |
SCK | - | [8]SCK | | [5]SDカード クロック(CLK) |
| | [9]MI | | [6]SDカード データ(DAT) |
MOSI | - | [10]MO | | [7]SDカード コマンド(CMD) |
3V | - | 3.3V | - | |
GND | - | GND | - | [4]GND |
| | 5V | - | [1]+5V電源入力(+4.0V~+6.5V) |
| - | | - | TREVA |
| | [4]SDA | - | SDA |
| | [5]SCL | | SCL |
| - | 3.3V | - | 3.3V |
| - | GND | - | GND |
SWITCH | | | | |
SWITCH (pull up) | - | [7]A7(RX) | | |
- | GND | | |
■Trevaカメラ外観
ブレッドボード・オブジェとしてはかなりアートな仕上がりかもしれません。
撮影者側には被写体確認用のディスプレイとシャッタースイッチがあります。
■ビルド環境
ソースコードのビルドには、PlatformIOを使用しています。
Arduino開発環境構築 PlatformIO
■ソースコード
プログラムは、verusさんのソースコードをベースに加筆しています。
Ref.TrevaなるカメラをArduinoにつなげてみる.
$ vi src/treva.ino
#include <SPI.h>
#include <SD.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
#define SPI_TFT_CS A0
#define SPI_DC A1
#define SPI_MISO MISO
#define SPI_MOSI MOSI
#define SPI_SCK SCK
#define SPI_RST A2
#define SPI_SD_SS A3
#define SPI_BLK A6
#define SWITCH_PIN A7
Adafruit_ST7789 tft = Adafruit_ST7789(SPI_TFT_CS, SPI_DC, SPI_MOSI, SPI_SCK, SPI_RST);
#define CLK_PIN SCL
#define DAT_PIN SDA
SPIClass SDSPI(HSPI);
typedef struct {
uint8_t Signature[2]; // 'BM'
uint8_t FileSize[4];
uint8_t reserved1[4]; // unused (=0)
uint8_t DataOffset[4];
uint8_t Size[4]; // Size of InfoHeader =40
uint8_t Width[4];
uint8_t Height[4];
uint8_t Planes[2]; // always 1
uint8_t BitPerPixel[2];
uint8_t Compression[4];
uint8_t ImageSize[4];
uint8_t XpixelsPerM[4];
uint8_t YpixelsPerM[4];
uint8_t ColorsUsed[4];
uint8_t ImportantColors[4];
} BMP_FORMAT;
typedef struct {
uint32_t Width;
uint32_t Height;
uint16_t BitPerPixel;
uint32_t FileSize;
uint32_t DataOffset;
uint32_t ImageSize;
uint32_t ColorsUsed;
} IMAGE_INFO;
IMAGE_INFO *img;
typedef struct {
uint8_t R;
uint8_t G;
uint8_t B;
} PIXEL_INFO;
PIXEL_INFO *RGBs = NULL;
PIXEL_INFO *pixels = NULL;
uint16_t swap16(uint8_t *pt) {
uint16_t ret;
ret = *pt;
ret |= (*(pt+1)<<8)&0xff00;
return ret;
}
void short2byte(uint8_t *pt, uint16_t val) {
*pt = (uint8_t)val &0x00ff;
*(pt+1) = (uint8_t)((val>>8)&0x00ff);
}
uint32_t swap32(uint8_t *pt) {
uint32_t ret;
ret = *pt;
ret |= (*(pt+1)<< 8)&0x0000ff00;
ret |= (*(pt+2)<<16)&0x00ff0000;
ret |= (*(pt+3)<<24)&0xff000000;
return ret;
}
void long2byte(uint8_t *pt, uint32_t val) {
*pt = (uint8_t)val &0x000000ff;
*(pt+1) = (uint8_t)((val>> 8)&0x000000ff);
*(pt+2) = (uint8_t)((val>>16)&0x000000ff);
*(pt+3) = (uint8_t)((val>>24)&0x000000ff);
}
int readbit() {
int a;
digitalWrite(CLK_PIN, HIGH);
a = digitalRead(DAT_PIN);
digitalWrite(CLK_PIN, LOW);
if(a){
return 1;
} else {
return 0;
}
}
int saveBmpFile(const char *fileName) {
BMP_FORMAT *Bmp;
PIXEL_INFO *imgpt = RGBs;
char fname[20];
static int fno = 0;
fno++;
sprintf(fname,"%s%d.bmp",fileName,fno);
SDSPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI, SPI_SD_SS);
pinMode(SPI_SD_SS, OUTPUT);
if (!SD.begin(SPI_SD_SS, SDSPI, 20000000)) return 0;
if (SD.exists(fname)) SD.remove(fname);
File fileSD = SD.open(fname, "wb");
if (!fileSD) return 0;
Bmp = (BMP_FORMAT *)malloc(sizeof(BMP_FORMAT));
memset(Bmp, 0x00, sizeof(BMP_FORMAT));
img->ImageSize = img->Width * img->Height * 3;
memcpy(&Bmp->Signature,(uint8_t*)"BM",2);
long2byte(Bmp->FileSize, sizeof(BMP_FORMAT) + img->ImageSize);
long2byte(Bmp->DataOffset, sizeof(BMP_FORMAT));
long2byte(Bmp->Size, 40);
long2byte(Bmp->Width, img->Width);
long2byte(Bmp->Height, img->Height);
short2byte(Bmp->Planes, 1);
short2byte(Bmp->BitPerPixel, 24);
long2byte(Bmp->ImageSize, img->ImageSize);
long2byte(Bmp->ColorsUsed, 0);
fileSD.write((uint8_t*)Bmp, sizeof(BMP_FORMAT));
int32_t x, y;
int32_t pos = 0;
uint8_t mod = (img->Width % 4) * 3; // RGB情報は画像横一列が4byteの倍数でなければならないための補正
for(y=0; y < img->Height; y++){
for(x=0; x < img->Width; x++,pos++,imgpt++){
fileSD.write(&imgpt->B, 1);
fileSD.write(&imgpt->G, 1);
fileSD.write(&imgpt->R, 1);
}
if (mod>0) fileSD.write(0x00,mod);
}
fileSD.close();
SD.end();
SDSPI.end();
free(Bmp);
return 1;
}
void capture() {
long magic = 0,i,k;
int v = 0, u = 0, y = 0;
int r = 0, g = 0, b = 0;
unsigned char d;
PIXEL_INFO *pt = pixels;
while((magic & 0xffffff) != 0xaa55ff) {
magic <<= 1;
if(readbit()) magic |= 0x01;
}
for(i=0; i<29*8; i++) readbit();
for( k=0; k < img->Width*img->Height*2; k++) {
d = 0;
for (i=0; i<8; i++) {
d <<= 1;
if(readbit()) d |= 0x1;
}
if((k & 0b11) == 0b00) { // 1st Byte
v = d - 128;
} else if((k & 0b11) == 0b10) { // 3rd Byte
u = d - 128;
} else if((k & 0b11) == 0b01 || (k & 0b11) == 0b11) { // Y0 or Y1
y = d;
r = u + y;
g = 0.98 * y - 0.53 * u - 0.19 * v;
b = v + y;
if(r > 255) r = 255;
if(r < 0) r = 0;
if(g > 255) g = 255;
if(g < 0) g = 0;
if(b > 255) b = 255;
if(b < 0) b = 0;
pt->R = r;
pt->G = g;
pt->B = b;
pt++;
}
}
pt = pixels;
for( int y=0; y < img->Height; y++) {
long pos = img->Width * (y + 1) -1;
for( int x=0; x < img->Width; x++, pos--, pt++) {
RGBs[pos].R = pt->R;
RGBs[pos].G = pt->G;
RGBs[pos].B = pt->B;
}
}
}
void setup() {
pinMode(CLK_PIN, OUTPUT);
pinMode(DAT_PIN, INPUT);
pinMode(SWITCH_PIN, INPUT_PULLUP);
img = (IMAGE_INFO *)malloc(sizeof(IMAGE_INFO));
img->Width = 96;
img->Height = 72;
RGBs = (PIXEL_INFO *)malloc(img->Width * img->Height * sizeof(PIXEL_INFO));
pixels = (PIXEL_INFO *)malloc(img->Width * img->Height * sizeof(PIXEL_INFO));
ledcSetup(0,12800,8);
ledcAttachPin(SPI_BLK,0);
ledcWrite(0,64);
tft.init(135,240);
tft.setRotation(0);
tft.fillScreen(ST77XX_BLACK);
}
void loop() {
int x, y;
long cnt;
capture();
for(y=0, cnt=0; y < img->Height; y++) {
for(x=img->Width - 1; x >= 0; x--, cnt++) {
tft.drawPixel(x+19,y+84,tft.color565(RGBs[cnt].R,RGBs[cnt].G,RGBs[cnt].B));
}
}
if (!digitalRead(SWITCH_PIN)) {
saveBmpFile("/treva");
tft.init(135,240);
tft.setRotation(0);
tft.fillScreen(ST77XX_BLACK);
}
}
●コード解説
ビットデータの取得
int readbit() {
int a;
digitalWrite(CLK_PIN, HIGH);
a = digitalRead(DAT_PIN);
digitalWrite(CLK_PIN, LOW);
if(a){
return 1;
} else {
return 0;
}
}
SCLの立ち上がり時にSDAのデータの読み込みが行われます。
ヘッダー情報の取得と読み飛ばし
while((magic & 0xffffff) != 0xaa55ff) {
magic <<= 1;
if(readbit()) magic |= 0x01;
}
for(i=0; i<29*8; i++) readbit();
Treva から送信されるデータの先頭は、0xAA 55 FF から始まる 32 byte のヘッダになります。
画像データの読み込み
for( k=0; k < img->Width*img->Height*2; k++) {
d = 0;
for (i=0; i<8; i++) {
d <<= 1;
if(readbit()) d |= 0x1;
}
if((k & 0b11) == 0b00) { // 1st Byte
v = d - 128;
} else if((k & 0b11) == 0b10) { // 3rd Byte
u = d - 128;
} else if((k & 0b11) == 0b01 || (k & 0b11) == 0b11) { // Y0 or Y1
y = d;
画像データの色空間は YUV で、UYVYフォーマット(YUV422)が採用されています。
Y:輝度信号 /
U (B-Y):色差信号(Cb) /
V (R-Y):色差信号(Cr)
UYVYフォーマットでは、1マクロピクセル(u_int32)の中に画像の2ピクセルが入ります。
この形式(YUV422)では、輝度信号(白黒)が色差信号(カラー)の二倍の解像度があります。
したがって、色解像度は 48x72画素分、輝度解像度は 96x72画素分になり、 これを考慮してYUV-RGB変換を行います。
Treva では、UYVY ではなく、8bit単位でV→Y→U→Y の順で送信されているようです。
※Trevaに電源を入れて最初の1枚目はダミー画像(黒画像)が送信されます。
| MIN | MAX | AVG |
Y | 16 | 250 | 126 |
U | 0 | 249 | 119 |
V | 95 | 249 | 124 |
|
ちなみに、カメラを適当な方向に向けて撮影してみたところ、写真1枚のYUV値は下記のような分布になりました。
|
※YUVとは
「人間の目は明るさの変化には敏感だが, 色の変化には鈍感である」 というわけで,色度を抑え、輝度により広い帯域やビット数を
割くことにより、少ない損失で効率の良い伝送や圧縮を実現するフォーマット.
r = u + y;
g = 0.98 * y - 0.53 * u - 0.19 * v;
b = v + y;
YUV→RGB変換の部分です。色々な変換式がありますので、試してみてください。
■BMPファイルとして保存
この処理では撮影画像をBMP形式で保存しています。詳細は下記をご覧ください。
減色処理 雑談
■撮影
プログラムを起動するとカメラからの映像が流れます。
被写体の構図が決まったところでシャッタースイッチを押すと映し出されている画像がSDカードに保存されます。
Trevaの96×72ピクセルの解像度を考えると、風景撮影には向きません。当時はきっと友達の写真を撮って楽しんでいたのでしょう。
ということで、ワンピースのCARIFAさんを撮影してみました。
う~む、どうなんでしょう、雰囲気だけは伝わるかもしれません。
■参考文献
・TrevaなるカメラをArduinoにつなげてみる.
・テニスボールを認識する移動ロボット
・TrevaをZaurusに接続しよう
・ESP32 ( ESP-WROOM-32 ) で micro SDHC メモリカードを使う場合の注意点
・YUVフォーマット及び YUV<->RGB変換
|
Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
Arduinoで学ぶ組込みシステム入門(第2版)
●Arduinoを使って組込みシステム開発を理解する
・ハードウェアやソフトウェアなどの基礎知識/
・設計から実装までを系統的に説明するモデルベース開発/
・Arduinoを用いた実際の開発例
最新 使える! MATLAB 第3版
◆◆すぐに「使える!」 全ページフルカラー!◆◆
・MATLAB R2022bに対応し、解説もより詳しく!/
・コマンド・スクリプトの例が豊富で、動かして学べる!/
・超基本から解説。これから使いはじめる人にぴったり!/
・全編フルカラー、スクリーンショットも豊富!
Amazon Web Services基礎からのネットワーク&サーバー構築改訂4版
1.システム構築をインフラから始めるには/
2.ネットワークを構築する/
3.サーバーを構築する/
4.Webサーバーソフトをインストールする/
5.HTTPの動きを確認する/
6.プライベートサブネットを構築する/
7.NATを構築する/
8.DBを用いたブログシステムの構築/
9.TCP/IPによる通信の仕組みを理解する
C言語は第二の母国語: 独学学生時代から企業内IT職人時代に培った、独立のための技術とノウハウ 平田豊著
学生時代から独学でプログラミングをはじめ、企業内でデバイスドライバを開発し、そして独立後もたくさんのアプリケーション開発や技術書制作に携わってきた著者。その筆者が大事に使い続ける「C言語」の“昔と今”について、気づいたことや役立つ知識、使ってきたツールなどについて、これまで記してきたことを整理してまとめました。
本書では、現役プログラマーだけでなく、これからプログラミングを学ぶ学生などにも有益な情報やノウハウを、筆者の経験を元に紹介しています。
1冊ですべて身につくJavaScript入門講座
・最初の一歩が踏み出せる! 初心者に寄り添うやさしい解説
・最新の技術が身につく! 今のJavaScriptの書き方・使い方
・絶対に知っておきたい! アニメーションとイベントの知識
・プログラミングの基本から実装方法まですべて学べる
図解! Git & GitHubのツボとコツがゼッタイにわかる本
ソフトウェア開発では欠かすことのできないGit、GitHub。
これからGit、GitHubを使いたいという入門者の方でも、実際に手を動かしながら使い方を学べます。
C自作の鉄則!2023 (日経BPパソコンベストムック)
メーカー製のパソコンはスペックが中途半端で、自分が本当に欲しい機種がない――。そう思っている人には、ぜひ自作パソコンをお薦めします。自作パソコンのパーツは進化が速く、しかも驚くほど種類が豊富。価格も性能も、幅広く用意されているため、満足度100%の“自分だけの1台”を手に入れることができます。
Interface 2023年6月号
特集:第1部 フィルタ設計 基礎の基礎/
第2部 係数アプリや波形観測アプリで合点!FIR&IIRフィルタ作り/
第3部 配布プリント基板で体験!マイコンで動くフィルタ作り
日経Linux 2023年5月号
【特集 1】 AI時代の最強フリーソフト ~ 25のやりたいを実現!
【特集 2】 AWS、Azureのうまみを無料で体感!面倒なことはクラウドに任せよう
【特集 3】 新しいRaspberry Pi Cameraで遊んでみよう
【特集 4】 Linuxで旧型PCを復活! 1kg切るモバイルPCを「ChromeOS Flex」でChromebook化
ラズパイマガジン2022年秋号
特集:5大人気ボード 電子工作超入門
「半導体不足で在庫が不足し、電子工作のボードがなかなか買えない…」。そんな今にふさわしい特集を企画しました。5種の人気ボードにすべて対応した電子工作の入門特集です。「GPIO」や「I2C」を使った電子パーツの制御方法は、どのボードでも同じです。手に入れられたボードを使って、今こそ電子工作を始めましょう。
地方で稼ぐ! ITエンジニアのすすめ
学歴、理系の知識、専門スキル……全部なくてもITエンジニアになれる!
地方でも高収入でやりがいをもって働ける!ITエンジニアの魅力を一挙大公開
Raspberry Piのはじめ方2022
本書は、ラズパイやPicoの買い方やインストール、初期設定といった基本から、サーバー、電子工作、IoT、AIといったラズパイならではの活用方法まで、1冊でお届けします。
ラズパイをこれから始める方向けに、全36ページの入門マンガ「女子高生とラズベリーパイ」も巻末に掲載。これを読むだけでラズパイがどんなものなのか、すぐに分かって触れるようになります。
ハッカーの学校 IoTハッキングの教科書
生活にとけこみ、家電機器を便利にするIoT技術。
Webカメラなど、便利の裏側に潜むセキュリティの危険性をハッキングで検証。
専門家がパケットキャプチャからハードウェアハッキングまで、その攻撃と防御を徹底解説。
本書は2018年7月に刊行された「ハッカーの学校IoTハッキングの教科書」に一部修正を加えた第2版です。
攻撃手法を学んで防御せよ! 押さえておくべきIoTハッキング
本書は、経済産業省から2021年4月にリリースされた、IoTセキュリティを対象とした『機器のサイバーセキュリティ確保のためのセキュリティ検証の手引き』の『別冊2 機器メーカに向けた脅威分析及びセキュリティ検証の解説書』をもとに、IoT機器の開発者や品質保証の担当者が、攻撃者の視点に立ってセキュリティ検証を実践するための手法を、事例とともに詳細に解説しました。
ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS…
全WEB媒体で効果バツグン!
カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術
プログラマーは世界をどう見ているのか 西村博之著
イーロン・マスク(テスラ)、ジェフ・べゾス(Amazon)、ラリー・ペイジ(Google)…etc.
世界のトップはなぜプログラマーなのか?
ニーア オートマタ PLAY ARTS改 <ヨルハ 二号 B型 DX版> PVC製 塗装済み可動フィギュア
「NieR:Automata」より、ヨルハ二号B型こと2BがPLAY ARTS改に新たに登場!
高級感の感じられるコスチュームや髪の質感、洗練されたボディバランス、細かなデティールに至るまでこだわり抜かれた逸品。
DX版には通常版のラインナップに加え2Bの随行支援ユニット ポッド042などをはじめ“純白の美しい太刀"白の約定やエフェクトパーツ、自爆モードを再現できる換装用ボディパーツ、シーンに合わせて変えられる顔パーツ2種も付属する豪華な仕様に。
作中のあらゆるシーンを再現することが可能なファン必見の一品となっている。
Newtonライト2.0 ベイズ統計
ベイズ統計は,結果から原因を推定する統計学です。AIや医療などの幅広い分野で応用されています。その基礎となるのは18世紀に考えだされた「ベイズの定理」です。
この本では,ベイズ統計学のきほんをやさしく紹介していきます。
白光(HAKKO) ダイヤル式温度制御はんだ吸取器 ハンディタイプ FR301-81
無水エタノールP 500mlx2個パック(掃除)
ケイバ(KEIBA) マイクロニッパー MN-A04
サンハヤト SAD-101 ニューブレッドボード
白光(HAKKO) HEXSOL 巻はんだ 精密プリント基板用 150g FS402-02
[Amazon限定ブランド]【指定第2類医薬品】PHARMA CHOICE 解熱鎮痛薬 解熱鎮痛錠IP 100錠
|