livedoor プロフィール

KK

趣味でささやかに株式投資をやっている、よくある個人投資家です。

どうやら梅雨入りしたようです。
ホームページも見てね!(よくある日帰り歴史スポット!)
http://etc.houkou-onchi.com/index.htm

KADOKAWAの株主優待2020

テレワーク関連ということでドワンゴも少し注目されたが、依然、ニコニコ動画がお荷物な印象は拭えない。 映画が駄目だったのは仕方がないとして、本は売れても良さそうな気もするが、いま思うと書店も結構閉まっていたか...
株主優待は、例年通り選択式で、今回も無難に書籍を選んでみた。
角川の株主優待
角川の株主優待

KADOKAWA(2020/7/7)
東証1部(情報・通信業)
決算 3月(権利確定月)
株価 2,293円(100株単位)
PER 33.57倍
PBR 1.34倍
配当 30円(1.31%)
株主優待 100株以上・1年超保有
(3年以上で長期優待あり)
優待内容(送付の冊子から選択) 長期優待
○書籍3冊
○DVDまたはBlu-ray 1点
○ニコニコグッズ1点
○ムビチケGIFTカード 2枚セット
○BOOK☆WALKER GIFTカード 2枚セット
etc...
○書籍2冊
○ムビチケオンラインGIFTカード 1枚
○BOOK☆WALKER GIFTカード 1枚

Typescriptに挑戦してみた話2

前回、Typescriptで画像を切り替えるプログラムを試してみた。 が、プログラムより、画像データの配列ばかり多いなど、今ひとつだった。
今回は、過去にjqueryで作った露出計算をお題にしてみる。
カメラの露出(EV値)とシャッタースピードを求めるプログラムだ。

露出計算

(例)絞りF8、シャッタースピード1/500、ISO感度100
それぞれ、8、500、100と入力すると、EV15と計算される。

シャッタースピード計算

(例)EV15、ISO感度100、絞り8
それぞれ、14、100、8と入力すると、512と計算される。

今回もjqueryに比べ融通の効かないネイティブjavascriptとTypescriptの型地獄にハマりながらの作業になった。 本来は逆にjavascriptの融通が効きすぎる事が問題でTypescriptがあるわけで、Jqueyの使い勝手の良さを再確認させられる。
まず、HTMLはタイトルの下に入力のテキストボックを表示するシンプルなものだ。
<h4>露出計算</h4> <div id="inputForm_mathExposure">ここに入力項目を挿入</div> <h4>シャッタースピード計算</h4> <div id="inputForm_mathSpeed">ここに入力項目を挿入</div> <script type="text/javascript" src="exposureMath.js"></script>
typescriptの方は、まず、計算式に使う変数をインターフェイスで指定。
?はオプショナルというもので、とりあえず値がないかもという指定らしい。
interface exposureFormat { exposure?: number; // 露出(EV値) diaphragm: number; // 絞り(F値) speed?: number; // シャッタースピード iso: number; // iso感度 }
続いてインターフェイスの型指定に従い露出計算のクラスを作る。
コンストラクタで変数を初期化。ここで計算結果の変数exposure?にして置かないと、インターフェイスが正しく実装されていない的なエラーが出る。 メソッドでは、計算された数字を戻り値にしているが、計算式の意味は難しくてわからない。
class mathExposure implements exposureFormat { constructor(public diaphragm: number, public speed: number, public iso: number) { } public getEV(): number { return Math.round(-Math.log(this.iso / 100 * Math.pow(1 / this.diaphragm, 2) * 1 / this.speed) / Math.log(2)); } }
シャッタースピードを求めるクラスも同様に作成。
class mathSPEED implements exposureFormat { constructor(public exposure: number, public iso: number, public diaphragm: number) { } public getSPEED(): number { return Math.round(1 / (Math.pow(2, -this.exposure) / (this.iso / 100) / Math.pow(1 / this.diaphragm, 2))); } }
続いては露出計算の入力項目とボタンを作る。
コンストラクタで答えに当たる露出項目は入力不可にしている。
メソッドgetInput()では、HTMLに項目とボタンを挿入する処理をする。 inputは、type="number"にして、CSSを設定している。
class cleateExposure { // 挿入場所のIDを取得 inputFormID=document.getElementById('inputForm_mathExposure'); inputText1 = document.createElement("input"); //入力項目の作成 inputText2 = document.createElement("input"); inputText3 = document.createElement("input"); inputText4 = document.createElement("input"); inputBtn = document.createElement("button"); btnText = document.createTextNode("計算"); //計算ボタン constructor() { this.inputText1.placeholder = '絞り'; //入力欄に表示する文字 this.inputText2.placeholder = 'スピード'; this.inputText3.placeholder = '感度'; this.inputText4.placeholder = '露出'; this.inputText4.disabled = true; //入力不可の項目 this.inputBtn.appendChild(this.btnText); } getInput(): void { // 各項目を挿入する処理 textID1 = this.inputFormID.appendChild(this.inputText1); textID2 = this.inputFormID.appendChild(this.inputText2); textID3 = this.inputFormID.appendChild(this.inputText3); textID4 = this.inputFormID.appendChild(this.inputText4); btnID = this.inputFormID.appendChild(this.inputBtn).style.margin="0 0 0 5px"; for(let i=0; i<4; i++){ // type="number"にしてwidthなどcssを当てる (this.inputFormID.childNodes[i]).type='number'; (this.inputFormID.childNodes[i]).setAttribute('style', 'width:66px; margin:3px; padding:3px;' ); } } }
シャッタースピードの方もクラスで項目を作る。
こちらは、cleateExposureクラスを継承して、 コンストラクタを読み込み、メソッドgetInput()をオーバーライドして項目の並びを変えている。
// extendsでクラスの継承を宣言 class cleateSpeed extends cleateExposure { inputFormID=document.getElementById('inputForm_mathSpeed'); constructor() { super(); // superでコントラスタ読み込み。 // 露出項目の入力不可をはずして、シャッタースピードを入力不可にする this.inputText2.disabled = true; this.inputText4.disabled = false; } getInput(): void { // getInput()も読み込んで項目の並びだけ変更 super.getInput(); const textID4 = this.inputFormID.appendChild(this.inputText4); const textID3 = this.inputFormID.appendChild(this.inputText3); const textID1 = this.inputFormID.appendChild(this.inputText1); const textID2 = this.inputFormID.appendChild(this.inputText2); const btnID = this.inputFormID.appendChild(this.inputBtn); } }
トップレベルでは、クラスの実装と計算ボタンクリックの処理を行う。
まずは、露出計算のクラスを実装する。
// 露出計算入力項目cleateExposureクラスの実装 const newInput = new cleateExposure(); newInput.getInput(); // 露出計算ボタンクリックの処理 newInput.inputBtn.addEventListener('click', () => { let input_fd = Number(newInput.inputText1.value); let input_ss = Number(newInput.inputText2.value); let input_iso = Number(newInput.inputText3.value); // 露出計算mathExposureクラスの実装 let sumExposure = new mathExposure(input_fd, input_ss, input_iso); // 計算結果の項目はtype="number"からtype="text"に変換 newInput.inputText4.type='text'; newInput.inputText4.value = String('EV' + sumExposure.getEV()); })
同様にシャッタースピード計算のクラスの実装と計算ボタンクリックの処理を行う。
// シャッタースピード計算入力項目クラスのcleateSpeed実装 const newInput1 = new cleateSpeed(); newInput1.getInput(); // シャッタースピード計算ボタンクリックの処理 newInput1.inputBtn.addEventListener('click', () => { let input_ev = Number(newInput1.inputText4.value); let input_iso = Number(newInput1.inputText3.value); let input_fd = Number(newInput1.inputText1.value); // シャッタースピード計算クラスmathSPEEDの実装 let sumSpeed = new mathSPEED(input_ev, input_iso, input_fd); newInput1.inputText2.value = String(sumSpeed.getSPEED()); })
こんなところで、まだ、プログラムの効率化とか整理までする技術はないが、とりあえず動いた。
今回のtypscriptのコード
// インターフェース --------------------------------------------------------------------------------------------------------- interface exposureFormat { exposure?: number; diaphragm: number; speed?: number; iso: number; } // 露出計算式のクラス --------------------------------------------------------------------------------------------------------- class mathExposure implements exposureFormat { wether: string = ""; constructor(public diaphragm: number, public speed: number, public iso: number) { } public getEV(): number { return Math.round(-Math.log(this.iso / 100 * Math.pow(1 / this.diaphragm, 2) * 1 / this.speed) / Math.log(2)); } public getWether(): string { if (this.getEV() > 12) { this.wether = "たぶん晴れ!"; } else if (this.getEV() < 9) { this.wether = "たぶん夜とか暗い場所"; } else if (isNaN(this.getEV())) { this.wether = "エラー!数値が適正ではありません"; } else { this.wether = "たぶん曇りか雨か夕方か薄暗い場所"; } return this.wether; } } // シャッタースピード計算式のクラス --------------------------------------------------------------------------------------------------------- class mathSPEED implements exposureFormat { constructor(public exposure: number, public iso: number, public diaphragm: number) { } public getSPEED(): number { return Math.round(1 / (Math.pow(2, -this.exposure) / (this.iso / 100) / Math.pow(1 / this.diaphragm, 2))); } } // 露出計算のテキストボックスとボタンを作成するクラス --------------------------------------------------------------------------------------------------------- class cleateExposure { inputFormID=document.getElementById('inputForm_mathExposure'); inputText1 = document.createElement("input"); inputText2 = document.createElement("input"); inputText3 = document.createElement("input"); inputText4 = document.createElement("input"); inputBtn = document.createElement("button"); btnText = document.createTextNode("計算"); constructor() { this.inputText1.placeholder = '絞り'; this.inputText2.placeholder = 'スピード'; this.inputText3.placeholder = '感度'; this.inputText4.placeholder = '露出'; this.inputText4.disabled = true; this.inputBtn.appendChild(this.btnText); } getInput(): void { const textID1 = this.inputFormID.appendChild(this.inputText1); const textID2 = this.inputFormID.appendChild(this.inputText2); const textID3 = this.inputFormID.appendChild(this.inputText3); const textID4 = this.inputFormID.appendChild(this.inputText4); const btnID = this.inputFormID.appendChild(this.inputBtn).style.margin="0 0 0 5px"; for(let i=0; i<4; i++){ (this.inputFormID.childNodes[i]).type='number'; (this.inputFormID.childNodes[i]).setAttribute('style', 'width:66px; margin:3px; padding:3px;' ); } } } // シャッタースピード計算の入力項目(cleateExposureクラスを継承) --------------------------------------------------------------------------------------------------------- class cleateSpeed extends cleateExposure { inputFormID=document.getElementById('inputForm_mathSpeed'); constructor() { super(); this.inputText2.disabled = true; this.inputText4.disabled = false; } getInput(): void { super.getInput(); const textID4 = this.inputFormID.appendChild(this.inputText4); const textID3 = this.inputFormID.appendChild(this.inputText3); const textID1 = this.inputFormID.appendChild(this.inputText1); const textID2 = this.inputFormID.appendChild(this.inputText2); const btnID = this.inputFormID.appendChild(this.inputBtn); } } // クラスの実装(露出計算)  ------------------------------------------------------------------------------------------------------------------------------------------------------------ const newInput = new cleateExposure(); // 露出計算入力項目クラスの実装 newInput.getInput(); // 露出計算ボタンクリックの処理 newInput.inputBtn.addEventListener('click', () => { let input_fd = Number(newInput.inputText1.value); let input_ss = Number(newInput.inputText2.value); let input_iso = Number(newInput.inputText3.value); let sumExposure = new mathExposure(input_fd, input_ss, input_iso); // 露出計算クラスの実装 if(input_fd < 1 || input_fd > 33 || input_fd==null){ window.alert("F値は、一応、1から32のくらいかと思います"); } if(input_ss < 1 || input_ss > 8000 || input_ss==null){ window.alert("シャッタースピードは、一応、1から8000くらいかと思います"); } if(input_iso < 100 || input_iso > 25600 || input_iso==null){ window.alert("ISO感度は、一応、100から25600くらいかと思います"); } newInput.inputText4.type='text'; // 露出項目はtype="number"からtype="text"に変換 newInput.inputText4.value = String('EV' + sumExposure.getEV()); const wetherComent = document.getElementById('wetherComent'); // コメントの表示と削除 if (wetherComent != undefined) { wetherComent.remove(); } let comentDIV = document.createElement("div"); comentDIV.setAttribute('id', 'wetherComent'); comentDIV.innerHTML = sumExposure.getWether(); newInput.inputFormID.after(comentDIV); }) // クラスの実装(シャッタースピード計算)  ------------------------------------------------------------------------------------------------------------------------------------------------- const newInput1 = new cleateSpeed(); // シャッタースピード計算入力項目クラスの実装 newInput1.getInput(); // シャッタースピード計算ボタンクリックの処理 newInput1.inputBtn.addEventListener('click', () => { let input_ev = Number(newInput1.inputText4.value); let input_iso = Number(newInput1.inputText3.value); let input_fd = Number(newInput1.inputText1.value); if(input_fd < 1 || input_fd > 33 || input_fd==null){ window.alert("F値は、一応、1から32くらいかと思います"); } if(input_iso < 100 || input_iso > 25600 || input_iso==null){ window.alert("ISO感度は、一応、100から25600くらいかと思います"); } let sumSpeed = new mathSPEED(input_ev, input_iso, input_fd); // シャッタースピード計算クラスの実装 newInput1.inputText2.value = String(sumSpeed.getSPEED()); const sppedComent = document.getElementById('sppedComent'); // コメントの表示と削除 if (sppedComent != undefined) { sppedComent.remove(); } let comentDIV = document.createElement("div"); comentDIV.setAttribute('id', 'sppedComent'); if (isNaN(sumSpeed.getSPEED())) { comentDIV.innerHTML = "エラー!数値が適正ではありません"; } else { comentDIV.innerHTML = `EV${input_ev}の時、感度${input_iso}で絞りF${input_fd}にすると、1/${sumSpeed.getSPEED()}近辺のシャッタースピードが得られるはず!`; } newInput1.inputFormID.after(comentDIV); })

といったところで、今回は日本のカメラメーカーの株を見てみる。
<< 日本のカメラメーカー(過去も含む) >>
(項目clickで昇降順並び替え)

マルハニチロの株主優待2020

マルハニチロも業績的に多くは望めないが、それは止むを得ない。
冷凍食品や缶詰は売れたと思われるが、コロナの影響で外食産業などの需要は激減し漁にも出られず...といったところか。
株主優待は、例年通り選択式で、今年は水産缶詰詰合せを選んだ。
まるずわいがに×1・ほたて貝柱×2・まぐら×3のセットだ。
マルハニチロの株主優待
マルハニチロの株主優待

マルハニチロ (2020/6/30)
東証1部 (水産・農林業)
決算 3月(権利確定月)
株価 2,207円(100株単位)
PER 12.91倍
PBR 0.88倍
配当 40円(1.81%)

優待内容(3月) 株 数 備 考
自社グループ取扱商品 100株以上 缶詰などから1点選択

再び松戸宿を歩く

松戸駅の西口を出て旧水戸街道に出てきた。
今日は、この道を中心に、かつて松戸宿があった町を歩くのだが、 2月に来たばかりでもあるし...まあ、いつもどおり淡々と撮っていく。
旧街道
ちょっと道を逸れたところにある墓所か。
庚申塔と地蔵。
庚申塔と地蔵(AuroraHDRでHDR合成)
西蓮寺の門前。
 西蓮寺
西蓮寺の境内。
 西蓮寺の境内(AuroraHDRでHDR合成)
旧街道を江戸方面に進む。
旧街道
善照寺の境内。
善照寺の境内(AuroraHDRでHDR合成)
善照寺
善照寺
善照寺
旧街道に戻る。
旧街道
旧街道
宝光院境内に並ぶ四国八十八ヶ所巡りの仏像。
宝光院
宝光院 四国八十八ヶ所
宝光院本堂。
宝光院
宝光院
旧街道を進む。
松戸の旧水戸街道(AuroraHDRでHDR合成)
旧街道
旧街道
松戸の旧水戸街道(AuroraHDRでHDR合成)
稲荷神社
この辺りは、坂川が旧街道と並行して流れている。
その坂川沿いに松先稲荷神社がある。
京の伏見稲荷から分霊されたもので、伝承に拠ると、伏見稲荷が火災にあった際に、 真っ先に松戸宿宮田の稲荷神社が御祭神霊を奉献したことから松先稲荷神社と称したという。
松戸神社の飛び地の末社であるらしい。
松先稲荷神社の境内
松先稲荷神社
松先稲荷神社
坂川の橋。 奥に旧水戸街道が走っている。
坂川の橋
参道から潜龍橋を渡り、松戸の総鎮守 松戸神社に入る。
松戸神社
松戸神社
御神水。
松戸神社の御神水
松戸神社の社殿と茅の輪。
松戸神社の社殿と茅の輪(AuroraHDRでHDR合成)
松戸神社前、宮前町の交差点。
旧街道
松戸神社前の宮前湯。
宮前湯
陣屋口橋と松戸神社の境内。
陣屋口橋
再び、旧水戸街道を進む。
松戸の旧水戸街道(AuroraHDRでHDR合成)
前回と同じく昼食は蕎麦処名古屋で鴨南蛮を食べる。
蕎麦処 名古屋(AuroraHDRでHDR合成)
角町交差点付近。
角町
角町
角町
角町
小山樋門史跡。
小山樋門史跡(AuroraHDRでHDR合成)
増長院
旧街道
旧街道
松戸の旧水戸街道(AuroraHDRでHDR合成)
陸橋を上がり常磐線の線路を渡る。
陸橋
千葉大学 園芸学部の前に「維新の志士 従五位 竹内啓先生の墓」とある。 実際に墓は見えないがあるのだろう。 竹内啓は、入間郡武内村(埼玉県坂戸市)の名主の一族だという。 江戸で医学などを学び、帰郷後は名主を継ぎ医者としても努めたが、 慶応3年(1867年)に赤報隊の一派を率い尊王倒幕の兵を挙げ幕府軍に敗北、処刑されたという。
竹内啓墓所
松戸市小山の弁財天宮。
弁天堂
弁天堂
弁天堂
最後は、小山の浅間神社にお参りする。
小山浅間神社
小山浅間神社の池
小山浅間神社
小山浅間神社(AuroraHDRでHDR合成)
小山浅間神社
小山浅間神社の狛犬(AuroraHDRでHDR合成)
小山浅間神社の狛犬(AuroraHDRでHDR合成)
小山浅間神社
小山浅間神社
角町交差点の手前まで戻ってきた。
ここからは、松戸市街とある方向に旧街道を進み松戸駅に向かう。
旧街道

といったところで、今日は、道路標示システムや信号機など、道路関連の事業を行う星和電機の株を見てみる。 星和電機は、照明機器が主な事業で、プラント向けの防爆照明で国内トップシェアを持つ会社であるらしい。

星和電機
東証1部(電気機器)
決算 12月(権利確定月)
本社 京都府城陽市
資本金 36.48億円
時価総額 93億円
従業員 598名
株価 630円
PER 55.26倍
PBR 0.74倍
配当 10〜12円(1.59%)
株主優待
特になし

ぴあの株主優待2020

オリンピックやイベントの延期、中止が相次ぐ中、素人が見てみ「ぴあ」は、最も影響を受ける企業の一つと言えるだろう。 決算も中々出なかったようで、来季は配当もなくなりそうだ。 ただ、ぴあに限らず、コロナの損失は諦めて、例えば、事業の撤退や売却など無理に利益を補填するような事は考えて欲しくない。
株主優待は、今年も図書カードだ。
今年も買いたい本は、いくらでもあるので、早速、使用した。
ぴあの株主優待

ぴあ (2020/6/26)
東証1部 (サービス業)
決算 3月(権利確定月)
株価 3,420円(100株単位)
PER --倍
PBR 7.82倍
配当 0〜5円(0%)

優待内容(3月) 株 数 金 額
ギフトカード 100株以上
(1年超保有)
2,500円
5,000円
1000株以上
(1年超保有)
5,500円
11,000円
※自社ギフトカード、オリジナルシネマギフトカード、オリジナル図書カードより優待金額範囲内で事前に自由選択
優待特集ボタン
昆虫特集ボタン
Archives
Google

webを検索
ブログ内 を検索

Recent Comments