とりあえずmacにインストールしました。
とりあえずGetting Started のVideoに沿ってやるか。
とりあえず新規作成画面
なるほど、Cacooみたいなこともできるのね。
1920 x 1080だとちょっとWFとしては描きにくいから、カスタムサイズか。
チュートリアルだけだとモチベーションのフォーカスが難しいから、次実際にワイヤー描く時になったらXdでやってみるか。
OK、悪くない。
ソフトウェアエンジニアの技術ブログ:Software engineer tech blog
随机应变 ABCD: Always Be Coding and … : хороший
とりあえずmacにインストールしました。
とりあえずGetting Started のVideoに沿ってやるか。
とりあえず新規作成画面
なるほど、Cacooみたいなこともできるのね。
1920 x 1080だとちょっとWFとしては描きにくいから、カスタムサイズか。
チュートリアルだけだとモチベーションのフォーカスが難しいから、次実際にワイヤー描く時になったらXdでやってみるか。
OK、悪くない。
#include < OneWire.h > int inPin=10; OneWire ds(inPin); void setup() { Serial.begin(9600); } void loop() { int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract; byte i; byte present = 0; byte data[12]; byte addr[8]; if(!ds.search(addr)){ ds.reset_search(); return; } ds.reset(); ds.select(addr); ds.write(0x44,1); delay(1000); present = ds.reset(); ds.select(addr); ds.write(0xBE); for(i=0; i<9; i++){ data[i] = ds.read(); } Serial.print("Temprerature:"); LowByte = data[0]; HighByte = data[1]; TReading = (HighByte << 8) + LowByte; SignBit = TReading & 0x8000; if(SignBit){ TReading = (TReading ^ 0xffff) + 1; } Tc_100 = (6 * TReading) + TReading / 4; Whole = Tc_100 / 100; Fract = Tc_100 % 100; if(SignBit){ Serial.print("-"); } Serial.print(Whole); Serial.print("."); if(Fract < 10){ Serial.print("0"); } Serial.print(Fract); Serial.print(" C\n"); }
頭で分かっていても、実際に手を動かしてみることが大事
Arduino Unoを購入、入出力端子が少なく、Raspberry Piより安価
マイコンチップ:ATmega328P
動作電圧:5V
入力電圧:7~12V (DCジャックもしくはVIN端子から入力)
デジタルI/Oピン:14本(うち6本はPWM出力可能)
アナログ入力ピン:6本(デジタルI/Oピンとしても利用可能)
DC出力電流:1つのI/Oピン当り20mA程度、I/Oピン全部の合計100mAまで
DC出力電流:3.3V出力ピン 50mA
Flashメモリ:32KB (うち0.5KBをブートローダーで使用)
SRAM:2KB
EEPROM:1KB
クロックスピード:16MHz
– Arduino Create(Arduinoのクラウド開発環境)を使うことができる
– センサー技術を組み合わせると色々できる
まずは初心者用のキットを動かすことから始めるのが王道か
手を広げすぎると、キャパオーバーになるから出来るところからやりた
ウィリアム・ギルバート原著(コルチェスター出身、ロンドンの医師):doctrina nostra & scientia magnetica
– アリストテレス、テオフラストス、プトレマイオス、ヒッポクラテス、ガレノスには敬意を払うべき
– 書物からの推論を採用せずに、実験をするべきである
### 磁石
magnes lapis(マグネスの石)が鉄の鉱脈の中に発見された
鉄の力強い吸引力が研究された
磁気の南北に向く運動が発見されていた
パラケルススは「天界には磁石の能力を付与された星がある」と断言していた
ナポリ王国の船乗りたちは方位針を使っていた
位置の変化による磁気偏角の違いなどから、特殊の星による影響とする考えを否定した
磁石はその性質の顕著な極[polos]を有する
磁石にも二つの極を持っており、極に近いほど強い力を得る
回転針によって磁極を確認した
磁石は自然な位置関係にあるときは引っ張るが、逆の位置関係にあるときは退ける
N極とS極は互いに誘う
ギリシア人は琥珀のことをエレクトロンと呼んでいた
実験が大事というのはプログラミングにも通じるところがあるように思います。
デジカメで画像を記録する部分をメディア(メモリーカード)という
記録メディアにはSDカード、コンパクトフラッシュ、xDピクチャーカード、メモリースティックなどがある
デジカメの機種によってどのメディアを使うか決まっている
### SDメモリーカード
サンディスク、松下、東芝が開発
32GB
Class 2 :読み書き時のデータ転送速度が最低 2MB/ 秒
Class 4 :読み書き時のデータ転送速度が最低 4MB/ 秒
Class 6 :読み書き時のデータ転送速度が最低 6MB/ 秒
### コンパクトフラッシュ
サンディスク提唱
コントローラーICとフラッシュメモリICを実装
### xDピクチャーカード
オリンパス、富士フイルム、東芝が共同開発
### メモリースティック
ソニー開発
HDD、メモリー系は東芝強いな〜
・san disk
しかし、今はクラウドの時代なのに、未だにメモリーカードに保存している意味がわからんな。
レンズとは?
-> 光を屈折させるガラスやプラスチックで作られた薄い部品
-> レンズそのものだけでなく、ピント調整や光の量を調整する部品も合わせたレンズシステム全体を指すことが多い
-> 光の通り方をコンピュータで計算し、最適な像ができるよう設計している
-> ピント合わせはレンズの全部または一部を前後させる
-> ヘリコイド、カムなどがある
-> レンズにはフィルムやセンサーに届く光の量を調節する仕組みもあり、「しぼり」という
-> 凹レンズは近視、凸レンズは遠視。凸凹レンズは通常組み合わせる
レンズの材質、大きさ、厚み、曲面の具合、レンズの組み合わせなどによって、レンズを通過する光はさまざまに変化する
### オートフォーカス
– 距離を測るには三角測量という方法が使われる。これは、一つの辺の長さと二つの頂点の角度が決まれば、三角形が定まる、という原理に基づく
– ファインダーから被写体を覗き、カメラの中にある小さな鏡をAが映るように回転させる
– デジカメでは、コントラスト検出方式というピント合わせ技術が用いられる
センサに写る像を調べながらレンズを前後に動かし、最もコントラストが高くなる位置にレンズを止める仕組み
多くのデジカメでは、ピントを調べる場所をいくつも用意して、ピントの合い方を計算して調整している
– 位相差検出式のオートフォーカスも一般的
### しぼりとシャッター
– 完全に開いてから完全に閉じるまでの露出時間をシャッタースピードという
– しぼりは感光材料に一度に当たる光の量を調整する仕組み
### レンズ
– センサーサイズや構造により焦点距離やレンズが異なる
### 材質
プリズムやハーフミラーなど光を透過させる光学ガラス、ミラーに使われる基板ガラス、屈折率や波長分散が細分化されるレンズ用ガラスに分けられる
アクロマティックレンズは屈折率の波長分散の小さいガラスと波長分散の大きいガラスを組み合わせることで、色収差を補正している
レンズ設計 例
焦点距離:200mm イメージサークル:φ43.2(像高21.6mm) Fナンバー:5.6 レンズ全長(第1面~像面):180mm以下 レンズ枚数:4枚以下 バックフォーカス:45mm以上
F値は小さいほどボケを活かした撮影が得意
### レンズの種類
(1)ズームレンズ
ズームできる範囲によってレンズの種類が分かれている
(2)単焦点レンズ
撮れる距離が決まっている
美しいボケ味を出したり暗い場所が得意
### 写す範囲
焦点距離によって「広角レンズ(35mm以下)」「標準レンズ(50mm前後)」「望遠レンズ(200mm以上)」に分類できる
「○○mm」の数字が大きいほど被写体に近づいたようになる
「18-55mm」など二つの数字が書いてあるのがズームレンズ
被写体との距離が決まっているシステムの場合は、その焦点距離に合わせたレンズを設計すれば良さそうですね。
CVで、ジェスチャ認識など被写体が動く想定の場合は、精度を上げるには被写体が動くから、ピントを合わせる必要がある。
んん、ちょっと待てよ。
イメージセンサーで光電変換を行ってるわけだけど、凹レンズの制御は自動でできるってこと?
あれ、こう考えると、画像処理のアルゴリズムだけでなく、レンズの設計の問題も出てくる??
OSS ライセンスの大まかな違い
– コピーレフトライセンス(GPLなど)の場合、配布者にソースコード公開の義務を負う
– 準コピーレフトライセンス(GNU Lesser General Public Licenseなど)は動的リンクとして使用した場合は、そこ以外の部分にはLGPLライセンスを適応させなくていい
– 非コピーレフトライセンス(MIT, Apache Licenseなど)の場合、成果物のソースコードを公開する義務を負わない(非公開にできる)
### Licenses一覧
– Apache License 2.0
L 非コピーレフト型ライセンス
L 著作権表示と免責事項表示の保持を求めている。
L 使用、商用利用、改変、複製、公開、再配布、改変したものの配布、サブライセンス、アプリケーションへの埋め込み、特許技術の利用は可能
L Trademarksに商標の使用を許可しない
L 他のライセンスに比べるとルールが緩め
L 利用割合 13%
L Spring, Tomcat, Apache HTTP SERVER
– GNU General Public License v3.0
L コピーレフト型ライセンス
L ライセンシの派生物まで同じライセンスを求める
L ライセンサが配布するOSSをライセンシが他のソフトウェアと組み合わせた場合、 ライセンサはライセンシに組み合わせ先のソフトウェアにまで同じライセンスの適用を要求
L 著作権表示を保持しなければならない+無保証
L GPLライセンスのオープンソース・フリーソフトウェアは、誰でも自由に複製・改変・頒布することが許可されている
L 利用割合 14%
L MySQL(GPL)
– MIT License
L 非コピーレフト型ライセンス
L 再配布時には著作権表示を残す+無保障
L ザブライセンスや著作権者の許諾に関する内容が細かく記載されている
L 利用割合 38%
– BSD 2-Clause “Simplified” License
L 非コピーレフト型ライセンス
L 再配布時には著作権表示を残す
L 無保証
– BSD 3-Clause “New” or “Revised” License
L 非コピーレフト型ライセンス
– Creative Commons Zero v1.0 Universal
L 「著作権者のクレジット(名前)表記」のみが絶対の条件とされ、他に3つの使用条件を組み合わせる事で、著作権者の希望に沿ったランセンスを明示できる
– Eclipse Public License 2.0
– GNU Affero General Public License v3.0
L コピーレフト型ライセンス
– GNU General Public License v2.0
L コピーレフト型ライセンス
– GNU Lesser General Public License v2.1
L 準コピーレフト型ライセンス
L 動的リンクとして使用した場合は、そこ以外の部分にはLGPLライセンスを適応させなくていい
L ライブラリやモジュールによく使用される
– GNU Lesser General Public License v3.0
L 準コピーレフト型ライセンス
– Mozilla Public License 2.0
ライセンスは非常にセンシティブなところですな。
Laravelでは画像はstorageフォルダに格納する
Webからのアクセスを許すには、public/storageからstorage/app/publicへシンボリックリンクを張る必要がある
https://readouble.com/laravel/6.x/ja/filesystem.html
### 駄目な例
moveコマンドで、public配下に格納
UsersController.php
if($file = $request->file('file')){ $name = $file->getClientOriginalName(); $file->move('./images/tmp/', $name); $inputs['path'] = $name;
### 格納先・読み込み元をstorageに修正
$ php artisan storage:link
// ./public/storageが./storage/app/publicへのリンクとなる
UsersController.php
if($file = $request->file('file')){ $name = $file->getClientOriginalName(); // $file->move('./images/tmp/', $name); $file->storeAs('./public/images/tmp/', $name); $inputs['path'] = $name;
confirm.blade.php
<img src="{{ $inputs['path'] ? asset('/storage/images/tmp/' . $inputs['path']) : 'https://placehold.jp/100x100.png' }}" class="img-icon">
確認画面で戻るボタンが押された場合は、Storage::deleteで削除する。確認画面で登録完了ボタンが押された場合は、画像の前部にCarbonでtimestampを付けて、prdフォルダに移動させる。画像のpathはDBに格納する。
UsersController.php
use Illuminate\Support\Facades\Storage; use Carbon\Carbon; public function store(Request $request) { $action = $request->get('action'); $inputs = $request->except('action'); if($action == '戻る'){ Storage::delete('public/images/tmp/'.$inputs['profile_img']); return redirect()->action('UsersController@create')->withInput($inputs); } $timestamp = Carbon::now()->timestamp; $path = $timestamp.'_'.$inputs['profile_img']; Storage::move('public/images/tmp/'.$inputs['profile_img'], 'public/images/prd/'.$path); return 'done'; }
ドキュメントを読む限り、storageに格納した方がファイルシステムの使う上で都合が良いように見えます。
### 初期(デフォルト)のメッセージ
./config/app.php
'locale' => 'ja',
$ php artisan make:request CreateUserRequest
CreateUserRequest.php
public function authorize() { return true; } public function rules() { return [ 'name' => 'required', ]; }
UsersController.php
public function confirm(CreateUserRequest $request) { return $request->all(); }
view.blade.php
@if ($errors->has('name')) <br><span class="error">{{ $errors->first('name') }}</span> @endif
エラーメッセージ
validation.required
### 英語のメッセージを複製
./resources/lang/ja/validation.php を作成
./resources/lang/en/validation.php の内容を ja/validation.php に複製
エラーメッセージ
The name field is required.
### 日本語メッセージにカスタマイズ
./resources/lang/ja/validation.php
'required' => ':attributeは必須です。',
'attributes' => [ 'last_name'=>'名前', ],
エラーメッセージ
名前は必須です。
バリデーションの仕様、メッセージに関しては、Wiki・Excelなどでステークホルダー全員で共有しながら管理することが多いでしょう。大規模なアプリケーションになるとバリデーションの数も増えてくるので、管理方法も工夫したい。
EBSは、SSD、HDDどちらもありますが、さて、タコができているかもしれませんが違いは。
HDD
HDDはHard Disk Driveの略で、電磁的に書き込み・読み込みする
プラッタと呼ばれる磁性体に塗られた円盤が入っており、ヘッドで書き込み、読み込みする
プラッタの回転数が多いほど、短時間で大量データ処理が可能
回転数はrpmという単位で表示される、1分間のプラッタ回転数(1分間に約7200~15000回転)
磁気ヘッド先端の電磁石がディスク表面のブロックの磁気方向を変えてデータを書き込む。書き込まれたデータは磁気リーダで読みこむ。読み込みはレコードの仕組みに似ている
電波ノイズを軽減する数値計算用アルゴリズムを改良している
保存できるデータ量が大きく、容量単価が安価だが、衝撃に弱く消費電力が大きい
機械駆動式のため、徐々に壊れる
トラックまでヘッドを移動させる「シーク時間」とセクターが来るまで待つ「回転待ち」時間を要する
SEAGATE, Toshiba, Western Digital
レーザーを使ってディスク表面にピンポイントで熱を与えてデータを書き込むheat assisted magnetic recording、HAMRが開発中。Bit Pattern Mediaが実用化すれば20TビットのHDDなども
SSD
Solid State Driveで半導体素子メモリを使ったドライブ
メモリーチップ内蔵。メモリチップはデータを記憶するICチップ
SSDの構造は、コントローラとNAND型フラッシュメモリ
衝撃に強く、発熱、消費電力が少ない、読み書きの速度が早く作動音がない。
HDDより小さく、軽い。ただし容量が少なく、容量単価の価格が高い
フラッシュメモリのセルも徐々に劣化する。1千~1万回で劣化
CFD、Samsung, Silicon-Power, Transcend
真性半導体、P型半導体、N型半導体に変化し、シリコンウエハーの表面に電子回路パターンを多層形成する
電子回路パターンはNAND型:否定論理積、NOR型:否定論理和
セル内部のフローティングゲートで電子を貯めているため、電源を切っても記憶できる
セルは、絶縁膜、フローティングゲート、トンネル酸化膜、シリコン基盤
SSDコントローラがNAND FLASHを制御
ウェアレベリング処理で、セルの負担を軽減 エラー補正機能やブロックの消去回数なども管理している
SSDは数百メガバイト/秒の転送速度で、HDDの50〜150MB/Sを大きく上回る NANDフラッシュメモリを平行動作
デュアルストレージ
SSDとHDDを両方搭載
SSDにはOSを入れ、HDDにはソフトやデータ保存を行う
e.g. M.2 SSD 256GB Serial ATAIII M.2規格+1TB Serial ATAII 5400rpm
ヨドバシカメラなどをいくと、windowsのノートはデュアルストレージがかなり売られていた。SSD256GB + HDD1T or 2TBが多い。
OSXはSSDだけども、デュアルになってくのだろうか。。