Quantcast
Channel: The blog of H.Fujimoto
Viewing all 904 articles
Browse latest View live

SearchContentsプラグイン(その13・検索フォームの作成)

$
0
0

SearchContentsプラグインでは、拙作のRealtimeRebuild/RebuildHelper/GetQueryParamプラグインと組み合わせることで、検索フォームを使った動的な検索を行うことができます。
今回は、検索フォームの作成手順を解説します。

1.プラグインのインストール

動的な検索を行うには、RealtimeRebuiild/RebuildHelper/GetQueryParamプラグインを別途インストールします。

RealtimeRebuildプラグインとRebuildHelperプラグインのインストール方法はこちらの記事をご参照ください。
また、GetQueryParamプラグインは、以下からダウンロードします。

GetQueryParam_1_14.zip

Zipファイルを解凍すると、「plugins」というフォルダができます。
このフォルダを、Movable Typeのインストール先ディレクトリにアップロードします。

2.検索フォームの作成

検索フォームの組み方は、基本的には以下のリストのようになります。

<form method="get" action="<$mt:RealtimeRebuildCGIPath$>">
  <input type="hidden" name="blog_id" value="<$mt:BlogID$>" />
  <input type="hidden" name="tmpl_id" value="<$mt:GetTemplateID tmpl_name="検索結果出力テンプレートモジュールの名前"$>" />
  <input type="hidden" name="first_time" value="1" />
  検索条件を入力するためのinput要素など
  <p>
    <input type="submit" value="送信" />
  </p>
</form>

検索結果を出力するには、別途テンプレートモジュールを作成し、そこにMTSearchContentsタグなどを記述します。
そのテンプレートモジュールの名前を、「検索結果出力テンプレートモジュールの名前」の箇所に書きます。

また、検索条件の入力には、一般的なフォームで使う要素(inputやselectなど)を使うことができます。
inputなどの要素では、サーバーに送信する値の名前をname属性で指定しますが、name属性の付け方に特に決まりはありません。
分かりやすい名前を使うことができます。

検索フォームおよび結果出力テンプレートの例は、次回以降の記事で紹介します。

3.SearchContentsプラグイン関係の記事の一覧

count

ESP32-WROVER-B開発ボードの「ESP32-DevKitC-VB」

$
0
0

ESP32-WROVER-B開発ボードの「ESP32-DevKitC-VB」という製品を見つけたので、試してみました。

ESP32-DevKitC-VB

ESP32-WROVERシリーズは、中国・上海のEspressif Systemsが開発している製品で、WiFi機能を持ったマイコンです。
ESP32とPSRAMをパッケージにしたもので、RAMが多いので活用の幅が広がります。

ESP32-WROVERは、内蔵しているSoCと、アンテナの形状によって、以下の4つのタイプがあります。

名前Socアンテナ
ESP32-WROVERESP32-D0WDQ6PCB
ESP32-WROVER-IESP32-D0WDQ6IPEX
ESP32-WROVER-BESP32-D0WDPCB
ESP32-WROVER-IBESP32-D0WDIPEX

ESP32-WROVERを搭載した開発ボードは、Amazonなどで売っています。
ただ、ESP32-WROVERではチップ上にTelecの刻印がないので、技適が大丈夫なのかという不安があります(Espressifのサイトによれば、技適は通っているようですが)。

一方、ESP32-WROVER-Bは、チップ上にTelecの刻印があるので、日本でも安心して使うことができます。
しかし、これまでは開発キットのようなものが売られていなかったので、自力で基板を作るなどする必要がありました。

先日、電子部品関係商社のMouserのサイトを見ていた時に、ESP32-DevKitC-VBをみつけました。
早速注文して、入手することができました。

PSRAMを使えるかどうか確認するために、Arduino IDEで以下のプログラムを書き込んでみました。
「ツール」→「ボード」のメニューで、ボードとして「ESP32 Dev Module」を選びました。
また、「ツール」→「PSRAM」のメニューで「Enabled」を選んでおく必要がありました。

#include "Esp.h"
#include "esp32-hal.h"

int *p;

void setup() {
  Serial.begin(115200);
  p = (int*) ps_malloc(500000);
  if (p == NULL) {
    Serial.println("NULL");
  }
  else {
    p[0] = 12345;
    p[499999] = 23456;
    Serial.print("p[0] = ");
    Serial.println(p[0]);
    Serial.print("p[499999] = ");
    Serial.println(p[499999]);
    Serial.print("psramsize = ");
    multi_heap_info_t info;
    heap_caps_get_info(&info, MALLOC_CAP_SPIRAM);
    Serial.println(info.total_free_bytes + info.total_allocated_bytes);
  }
}

void loop() {
}

シリアルモニタには以下のように出力され、PSRAMの読み書きを確認することができました。

p[0] = 12345
p[499999] = 23456
psramsize = 4194236
count

SearchContentsプラグイン(その14・検索結果出力テンプレートの作成)

$
0
0

SearchContentsプラグインでは、検索フォームで入力された条件を元に、検索結果を出力ことができます。
その際の検索結果出力テンプレートの作成方法を解説します。

1.テンプレートモジュールの新規作成

検索結果出力テンプレートは、テンプレートモジュールとして作成します。
テンプレート名の付け方は自由です。
また、テンプレートの書き方も、基本的には一般のテンプレートと同じです。

2.フォームから送信された値の利用

フォームから送信された値をテンプレート内で利用するために、MTSearchContentsタグの前に「MTGetQueryParamsToVars」というテンプレートタグを入れます。
MTGetQueryParamsToVarsタグによって、フォームから送信された値を、テンプレートの変数(MTGetVarタグで取得できる値)として扱うことができます。

変数名は、フォームでのname属性の値の前に「qp_」を付けたものになります。
例えば、フォームに以下のようなinput要素を入れたとします。

<input type="text" name="title">

この場合、このinput要素のname属性の値は「title」なので、入力された値は以下のMTGetVarタグで得ることができます。

<&mt:GetVar name="qp_title"$>

また、入力された値をモディファイアの値として指定する場合、Movable Typeの通常のテンプレートと同様に、「モディファイア名="$変数名」のように書きます。
例えば、前述のinput要素で入力された値を、MTSearchContentContainタグのvaluesモディファイアに指定する場合だと、以下のように書きます。

<&mt:SearchContentContain content_field="コンテンツフィールド名" values="$qp_title"$>

3.リアルタイム再構築の許可

作成したテンプレートモジュールは、RealtimeRebuildプラグインで再構築することを許可します。

対象のサイトで「設定」→「プラグイン」メニューでプラグイン一覧のページを開き、RealtimeRebuildプラグインの設定を開きます。
そして、「再構築を許可するテンプレート」の部分で、検索結果出力用テンプレートモジュールのチェックをオンにし、「変更を保存」ボタンをクリックします。

検索結果出力テンプレートのリアルタイム再構築を許可する

SearchContentsプラグイン(その15・検索フォームと検索結果出力テンプレートの例)

$
0
0

SearchContentsプラグインで、検索フォームを使って検索結果を出力する例を紹介します。

1.取り上げる例

「商品」というコンテンツタイプがあり、「商品名」というテキスト型のフィールドと、「単価」という数値型のフィールドがあるものとします。
この状況で、「商品名に○○を含み、単価が△△円以上□□円未満」という条件で検索するようなフォームを作るとします。
また、検索結果は単価の安い順に並べ替えるとします。

2.検索フォーム

検索フォームを表示するページのテンプレートに、以下のような部分を追加します。
3つのinput要素を使って、商品名/価格の下限/上限の条件を入力できるようにしています。
なお、3行目の「テンプレート名」のところは、実際の検索結果表示テンプレートモジュールの名前に置き換えます。

<form method="get" action="<$mt:RealtimeRebuildCGIPath$>">
  <input type="hidden" name="blog_id" value="<$mt:BlogID$>" />
  <input type="hidden" name="tmpl_id" value="<$mt:GetTemplateID tmpl_name="テンプレート名"$>" />
  <input type="hidden" name="first_time" value="1" />
  <p>
    <label for="item_name">商品名</label> <input type="text" id="item_name" name="item_name" />
  </p>
  <p>
    <label for="min">価格の下限</label> <input type="text" id="min" name="min" />
    <label for="min">上限</label> <input type="text" id="max" name="max" />
  </p>
  <p>
    <input type="submit" value="送信" />
  </p>
</form>

3.検索結果表示テンプレートモジュール

検索結果表示テンプレートモジュールは、以下のように組みます。

・
・(HTMLのヘッダーなど)
・
<$mt:GetQueryParamsToVars$>
<mt:SearchContents content_type="商品">
  <mt:If name="qp_item_name">
    <$mt:SearchContentContain content_field="商品名" values="$qp_item_name"$>
  </mt:If name="qp_item_name">
  <mt:If name="qp_min">
    <$mt:SearchContentCompare content_field="単価" ge="$qp_min"$>
  </mt:If>
  <mt:If name="qp_max">
    <$mt:SearchContentCompare content_field="単価" lt="$qp_max"$>
  </mt:If>
  <$mt:SearchContentSort content_field="単価"$>
</mt:SearchContents>
 
<mt:If tag="SearchContentLoadedCount">
  <p><$mt:SearchContentLoadedCount$>件見つかりました</p>
  <mt:SearchFoundContents>
    <mt:If name="__first__">
      <table>
      <tr><th>商品名</th><th>単価</th></tr>
    </mt:If>
    <tr>
      <td><a href="<$mt:ContentPermalink$>"><mt:ContentField content_field="商品名"><$mt:ContentFieldValue$></mt:ContentField></a></td>
      <td><mt:ContentField content_field="単価"><$mt:ContentFieldValue$></mt:ContentField></td>
    </tr>
    <mt:If name="__last__">
      </table>
    </mt:If>
  </mt:SearchFoundContents>
<mt:Else>
  <p>条件にあう商品はありません</p>
</mt:If>
・
・(フッターなど)
・

前半では、フォームから送信された条件を元に、MTSearchContentsタグのブロックで検索を行っています。
フォームのそれぞれの欄に値を入力されないこともありますので、空欄かどうか(=変数に値があるかどうか)をMTIfタグで判断し、値があるときだけ条件として使うようにしています。
そして、後半では、検索されたコンテンツデータをtableとして出力しています。

count

UPSのバッテリーを互換品に交換してみた

$
0
0

仕事用のマシンは、APCのSUA1500というUPS(無停電電源)に接続しています。
このバッテリーの寿命切れの警告音が鳴るようになったので、互換品のバッテリーに交換してみました。

SUA1500の純正のバッテリーは、「RBC7L」という型番のものです。
安い店でも4万円近くする製品です。

ただ、このバッテリーは、一般的な鉛蓄電池を2個直列に接続して、端子を付けたものです。
純正の物でなくても、同等の互換製品で代用することができます。

互換品として、LONGというメーカーのWP20-12Iの2個組を購入しました。
古いバッテリーの送料を合わせても16,000円ほどで、純正品の半額以下で済みました。

互換品に交換する方法は、こちらのページで解説されていました。
特に難しい点はなく、問題なく交換することができました。

count

PythonでData APIにアクセスする

$
0
0

この記事はMovable Type Advent Calendar 2018の13日目です。

Movable TypeのData APIでは、HTTPプロトコルを扱うことができるプログラム言語であれば、どの言語でもアクセスすることができます。
これまでにいくつかのプログラム言語でData APIにアクセスしたことがありますが、今回はPythonを試してみました。

Pythonは、機械学習のライブラリが充実していて、このところ脚光を浴びています。
また、Raspberry PIで電子工作する際にも、Pythonでプログラムを書くことが多いです。
これらのことから、PythonでData APIにアクセスすることができれば、メリットがあると考えます。

1.利用するライブラリ

Pythonでは標準で様々なライブラリがあり、それらを利用することで、様々なプログラムを組むことができます。
Data APIでアクセスする場合、HTTPプロトコルとJSONを扱いますが、これらに対応するライブラリもあります。
HTTPプロトコルは「urllib.request」、JSONは「json」というライブラリを使います。
また、URLのパースなどで「urllib.parse」というライブラリも使います。

2.コンテンツデータの取得

簡単な例として、Movable Type 7のコンテンツデータを取得するプログラムを書いてみました。
以下のような状況を想定しています。

  • IDが1番のサイトにコンテンツタイプを作成していて、そのIDは2番
  • コンテンツタイプに、「タイトル」という名前のコンテンツフィールドが存在する
  • 取得したコンテンツデータの「タイトル」フィールドの値を表示
import urllib.request, json

url = "https://path-to-mt/mt-data-api.cgi/v4/sites/1/contentTypes/2/data"
with urllib.request.urlopen(url) as res:
    html = res.read().decode("utf-8")
    j = json.loads(html)
    contents = j["items"]
    for content in contents:
         data = content["data"]
         for d in data:
             if d["label"] == "タイトル":
                 print(d["data"])

3.コンテンツデータの作成

もう1つの例として、コンテンツデータを作成するプログラムを書いてみました。
以下のような状況を想定しています。

  • 認証する際のユーザー名とパスワードは、それぞれsample_user/sample_pass
  • IDが1番のサイトにコンテンツタイプを作成していて、そのIDは2番
  • コンテンツタイプに、IDが3番のコンテンツフィールドがある
  • コンテンツデータを作成し、識別子を「test_label」、IDが3番のコンテンツフィールドの値を「test_text」にし、公開状態を公開にする
import urllib.request, urllib.parse, json

url = "http://path-to-mt/mt-data-api.cgi/v4/authentication"
data = {
    "username": "sample_user",
    "password": "sample_pass",
    "clientId": "test"
}
data = urllib.parse.urlencode(data).encode("utf-8")
with urllib.request.urlopen(url, data=data) as res:
    html = res.read().decode("utf-8")
    jsn = json.loads(html)
    accessToken = jsn["accessToken"]

url = "http://path-to-mt/mt-data-api.cgi/v4/sites/1/contentTypes/2/data"
req = urllib.request.Request(url)
req.add_header("X-MT-Authorization", "MTAuth accessToken=" + accessToken)
content = {
    "label": "test_label",
    "status": "publish",
    "data": [
        {
            "id": "3",
            "data": "test_text"
        }
    ]
}
j = json.dumps(content, separators=(',', ':'))
data = { "content_data": j }
data = urllib.parse.urlencode(data).encode("utf-8")
with urllib.request.urlopen(req, data = data) as res:
    html = res.read().decode("utf-8")
    jsn = json.loads(html)
    if ("error" in jsn):
        print("create content data error")
count

Movable Type 7 AdvancedとMovable Type 7 r.4501のβ版が公開

$
0
0

エンタープライズ向けMovable Type 7の「Movable Type 7 Advanced」と、そのベースになっているMovable Type 7 r.4501のβ版が公開されました。

Movaeble Type 7 r.4501では、新機能として以下が追加されました。

  • 管理画面のスマートフォン対応
  • コンテンツタイプ関連のテンプレートタグがダイナミック・パブリッシングに対応
  • グループ管理をコア機能に

また、これまでに見つかった不具合の修正もいろいろと行われています。

count

DevicePlusに「Aruduino Megaで電子工作!FeliCaリーダーで入退室記録システムを作ろう」を寄稿

$
0
0

ローム株式会社様のオウンドメディア「DevicePlus」に、「Aruduino Megaで電子工作!FeliCaリーダーで入退室記録システムを作ろう」という記事を寄稿しました。
FeliCaリーダーにFeliCaカードをかざして、その時の日時を記録するものです。
タイムカードのような使い方をすることができます。

photo01.jpg

FeliCaは、NFC(Near Field Communication)の規格の1つで、SUICAなど日本ではよく利用されています。
今回の記事では、FeliCaの「IDm」という識別情報を利用して、個々のカードを認識し、それぞれでタッチした日時を記録するようにしています。
1日の中で、最初にタッチした時刻を入室時刻、最後にタッチした時刻を退室時刻として記録します。
タッチしたは、CSVファイルとしてSDカードに保存しますので、後でExcel等で見ることができます。

プログラムを作る際には、FeliCaリーダーとシリアル通信しつつ、パソコンでデバッグします。
そのためにシリアルが2系統以上欲しいので、Arduino Mega 2560を選びました。

今回作ったものは、簡易的なタイムカードとして使うことができます。
これをさらに発展させれば、より本格的な使い方をすることもできます(例:入退室日時をサーバーに送信するなど)。
ぜひお試しください。

count

あけましておめでとうございます

$
0
0

あけましておめでとうございます。
本年もよろしくお願いいたします。

このところ当サイトは記事更新が少なくなっていますが、今年はなるべく更新を増やしたいと思います。
Movable Type 7の話はもちろんのこと、2016年秋から始めた電子工作関係もより進めていく予定です。

また、昨年は遠くのイベントに行くことが少なかったです。
今年はもう少しあちこちに行きたいと思います。

昨年より良い1年にしていきたいと思います。
皆様よろしくお願いいたします。

count

3Dプリンタはじめました

$
0
0

先日、3Dプリンタを購入しました。
まだ修行中の身(?)ですが、なかなか面白いです。

電子工作をすると、作ったものをケースにまとめたいという場面が出てきます。
しかし、市販のケースだと、大きさが合わなかったり、穴あけなどの加工が必要だったりと、手間がかかります。
この問題を含め、物を出力したい場面がそこそこありますので、3Dプリンタを買いました。

今回購入したのは、中国のJGAuroraというメーカーの「A3S」という製品です。
箱から出して若干組み立てが必要ですが、ネジを数本止める程度です。

ただ、印刷が成功するまでには、試行錯誤が必要でした。
最初は、印刷したものがプラットフォームからはがれてしまい、なかなかうまくいきませんでした。
プラットフォームの高さの調整を行ったり、プラットフォーム表面にスティックのりを塗ったりして、ようやく印刷できるようになりました。

また、自分で三次元のものを作るには、三次元CADソフトに慣れることも必要です。
定番ソフトはAutodeskのFusion 360のようなので、そちらを使って試しています。
ソフト自体の操作に慣れることが必要ですし、また三次元の物体を頭の中でイメージしながら作ることにも慣れが必要ですが、結構楽しいです。
直方体や円柱を組み合わせた簡単なものであれば作れるようになってきました。

count

MT7用FreeLayoutCustomFieldプラグイン拡張パックのリッチテキストのサイズを変更したときの不具合と対処

$
0
0

MT7用FreeLayoutCustomFieldプラグイン拡張パックで、「記事のカスタムフィールドにリッチテキスト型のフィールドを追加し、そのリッチテキストの右下のサイズ変更ハンドルをドラッグすると、リッチテキストの内容が消えて編集できなくなる」という不具合のご指摘がありました。
この対処を紹介します。

対処の手順は以下の通りです。

1.tinymce.jsの書き換え

この不具合について調べたところ、TinyMCEのJavaScriptの書き換えが必要でした。
「mt-static」→「plugins」→「TinyMCE」→「tiny_mce」ディレクトリにある「tinymce.js」ファイルで、1205行目付近を以下のように書き換えます。

書き換え前

function defaultNativeHandler(evt) {
  executeHandlers(fix(evt || win.event), id);
}

書き換え後(ハイライトの行を追加)

function defaultNativeHandler(evt) {
  if (evt.buttons == 1 &&
      (
        (evt.type == 'mousedown' && tinymce.DOM.hasClass(evt.target, 'mce-i-resize'))
        || 
        (evt.type == 'mousemove' && evt.target.style.zIndex == '2147483647')
      )
  ) { 
    evt.stopPropagation();
  }
  executeHandlers(fix(evt || win.event), id);
}

2.tinymce.min.jsの作成

1.で書き換えたtinymce.jsをMinifyして、tinymce.min.jsファイルを作成します。
そして、そのtinymce.min.jsを、「mt-static」→「plugins」→「TinyMCE」→「tiny_mce」ディレクトリにある同名のファイルに上書きします。

3.制限事項

MTクラウド版では、tinymce.jsおよびtinymce.min.jsを書き換えることができません。
そのため、今回の不具合に対応することができませんので、制限事項とさせていただきます。

なお、リッチテキストのサイズを変更すると、見た目上は文章が消えたようになりますが、内部的には文章は残っています。
記事を保存して開きなおせば、文章は表示されます。

count

FreeLayoutCustomFieldプラグイン不具合修正

$
0
0

FreeLayoutCustomFieldプラグインに対して、「ラジオボタンを含むフィールド群(またはユニット)を複数追加して、それらをドラッグアンドドロップで並べ替えると、ラジオボタンの値が初期値に戻る」という不具合がありました。
修正したものを公開します。

Movable Type 6.x用

Movable Type 6.x用のプラグインは以下からダウンロードします。

FreeLayoutCustomField_1_15.zip

Movable Type 7用

Movable Type 7用では、FLCFCommonプラグインの修正になります。
以下からダウンロードします。

FLCFCommon_1_01.zip

count

50歳

$
0
0

今日(2019年4月2日)は私の誕生日でした。
ついに50歳になりました。

50歳にはなりましたが、そのことはあまり意識せずに、これからもやっていきたいと思います。
今後もよろしくお願いいたします。

count

Movable Type 7 r.4601などがリリース

$
0
0

シックスアパートから以下の製品がリリースされました。

  • Movable Type 7 r.4601
  • Movable Type Premium 1.2
  • Movable Type 6.3.9
  • Movable Type 6.5

ニュースリリースはこちら

今回の注目点は、Movable Type 6.5がリリースされたことです。
Movable Type 6.3.9は、Movable Type 6.3.8で見つかったセキュリティ上の不具合のみ修正されています。
一方、Movable Type 6.5は、セキュリティに関係しない不具合も数多く修正されています。

Movable Type 7が出たことで、Movable TYpe 6系はセキュリティ関係のメンテナンスのみ行われる状態になっていました。
その期限が今年5月16日であり、今の状態だと、それまでにMovable Type 7にバージョンアップすることが必要でした。

しかし、Movable Type 6.5がリリースされ、そのメンテナンス期限が2022年5月16日までとなりました。
Movable Type 6.5にバージョンアップすることで、あと約3年間はMovable Type 6系を使い続けることができます。

count

Arduino Nanoの新製品が発表

$
0
0

2019年5月17日~19日に開催されたMaker Faire Bay Area 2019で、Arduino Nanoの新製品が発表されました。

Arduino Nano Every

Arduino Nano Everyは、Arduino Nanoの後継的な製品です。
以下のように、従来のArduino Nanoよりスペックが上がっています。

Arduino NanoArduino Nano Every
CPUATMega328PATMega4809
クロック周波数16MHz20MHz
Flashメモリ32KB48KB
RAM2KB6KB

Arduino Nano公式ストアでは、ピンヘッダなし/ありのそれぞれで、9.90$/11.90$の値段になっています。
これまでのArduino Nanoの半額程度になっています。
ピンヘッダなしが2019年6月中旬、ピンヘッダありが7月下旬発売予定とのことです。

Arduino Nano 33 IoT

Arduino Nano 33 IoTは、IoT関係のものを作るのに適した製品です。
WiFiおよびBluetoothに対応しています。
また、CPUはSAMD21G18Aで、Flashメモリ256KB/RAM32KBを利用できます。
ピンヘッダなしが18.00$で2019年6月中旬発売予定、ピンヘッダありが20.00$で2019年7月末発売予定です。

Arduino Nano 33 BLE

Arduino Nano 33 BLEは、名前の通りBLEに対応した製品です。
BLE内臓マイコンのnRF52480がベースになっています。
ピンヘッダなしが19.00$で2019年6月中旬発売予定、ピンヘッダありが21.00$で2019年7月末発売予定です。

Arduino Nano 33 BLE Sense

Arduino Nano 33 BLEに、温度・湿度・気圧・光などのセンサーを組み込んだ製品です。
ピンヘッダなしが29.50$で2019年7月中旬発売予定、ピンヘッダありが31.50$で2019年7月末発売予定です。

日本での発売は?

日本での発売については不明です。
これまでのArduinoの販売状況からすると、Arduino Nano Everyは日本でもそう遠くないうちに販売されそうです。
一方、残りの3機種は、技適の関係で日本では当面は販売されないと思われます。

count

MTDDC Meetup TOKYO 2019申し込み開始

$
0
0

2019年11月16日(土)・17日(日)の2日間にわたって、「MTDDC Meetup TOKYO 2019」が開催されます。
昨日(2019年9月2日)から、申し込みが開始されました。

今回のMTDDCは「ゲームチェンジ」をテーマにしています。
1日目はセッション、2日目はワークショップを開催します。

1日目では、「データ中心社会におけるCMSの価値をみんなで考えよう」ということで、CMSをAIやIoTなどのWeb制作以外の分野にも生かそうというような内容のセッションを予定しています。
また、これまで通り、Web全般やMovable Typeについてのセッションも予定しています。

また、2日目は「5年くらい先の未来のECサイトを考えるアイデアソン」をテーマに、AIやIoTとの連携など、新しいCMSの可能性を感じる体験をしていただけるような内容を予定しています。

1日目・2日目の申し込みは別々になっています。
それぞれのお申し込みは以下から行うことができます。

1日目の申し込み
2日目の申し込み

count

Movable Typeで猫耳を動かす

$
0
0

この記事はMovable Type Advent Calednarの17日目です。

MTDDC Meetup TOKYO 2019の私のセッションの中で、猫耳をMovable Typeで動かすという話をしました。
このことについて紹介します。

1.猫耳を作る

「動く猫耳」の元ネタは、スイッチサイエンスの以下の動画です。

猫耳のパーツのセットが販売されていますので、そちらを購入して組み立てました。
また、micro:bitがセットになったものも販売されています。

2.コントローラを作る

スイッチサイエンスの元ネタでは、micro:bitを使って猫耳を動かすようになっていました。
しかし、Movable TypeのData APIと連携させるために、WiFi内蔵マイコンのESP32を使ってコントローラを自作しました。
コントローラには、猫耳だけでなくフルカラーLEDも接続しました。
また、コントローラのケースは3Dプリンタで出力しました。

controller.jpg

3.Movable Typeで猫耳の動かし方を決める

猫耳の動かし方は、Movable Typeのコンテンツとして管理するようにしました。
左右の耳の向きと、フルカラーLEDの色を、データとして入力する形にしました。

猫耳の動かし方をコンテンツとして保存

ESP32はWebサーバーとして動作させます。
そして、Webブラウザ等でESP32にアクセスすると、ESP32がData APIでMovable Typeにアクセスし、猫耳とLEDの動作データを取得して、それに沿って動くようにしました。

count

あけましておめでとうございます

$
0
0

あけましておめでとうございます。
本年もよろしくお願いいたします。

1.仕事が変わります

まず、今年から仕事が変わることをお知らせします。

これまでは執筆をメインにしつついくつかの仕事をしていて、その1つとして群馬医療福祉大学での非常勤講師がありました。
非常勤講師なので、授業があるときだけ大学に行く形で、4月~7月に週2回通っていました。

その群馬医療福祉大学で、2021年4月に学部を新設する構想があります。
それに伴って常勤の講師を増やす必要があるとのことで、お声がけをいただきました。
そして、今年1月から群馬医療福祉大学で常勤で勤務することになりました。

なお、執筆の仕事は今後も行いますが、頻度はだいぶ下がると思います。

2.YouTubeやってみます

仕事が変わるのに合わせて、今年はYouTubeへの動画投稿をやってみようと思っています。
この分野は全くの素人ですし、また仕事しながらなのであまり多くは投稿できないと思いますが、「好きなことで生きていく」を実現できるのかどうかを検証してみたいと思います。

その一環として、昨年暮れから鉄道旅動画を始めてみました。
他にもいくつかの方向性で動画を作っていくつもりです。
チャンネル登録していただけると幸いです。

count

新刊「高配当・連続増配株投資の教科書」発売

$
0
0

高配当・連続増配株投資の教科書 (高配当×連続増配+値上がり益で中長期の資産形成!)拙著新刊の「高配当・連続増配株投資の教科書」が発売されました。
自由国民社刊で、定価1,500円(税別)です。

2019年には年金2,000万円問題が話題になりましたが、このことをきっかけにして、投資について考える人が増えたようです。
最近では投資関係の入門書が売れるようになってきたそうです。

投資の方法はいろいろありますが、その1つとして、「株式を長期保有して配当をもらうこと」が挙げられます。
預貯金の金利はほぼ0の状態が続いていますが、株式の配当利回りは東証一部全体の平均でも年2%程度あります。
銘柄によっては年5%を超えるものもあります。

今回の拙著「高配当・連続増配株投資の教科書」では、配当利回りの良い銘柄を長期保有して、配当をもらいつつ株価の値上がりを待つことを取り上げています。
「配当利回りが良い銘柄なら何でも良い」というわけではありませんので、銘柄をどのように選ぶかを詳しく解説しています。
投資を検討している方にぜひお読みいただきたいです。

count

「電飾ピアノ」で「パプリカ」を弾いてみた

$
0
0

Raspberry PIを使って、「電飾ピアノ」というものを作ってみました。
そして、Foorinの大ヒット曲「パプリカ」を弾いてみました。


電飾ピアノは、ピアノで弾いた音に合わせて、LEDマトリックスパネルが虹色に光る装置です。
Raspberry PI+USB MIDIインターフェース+LEDマトリックスパネルの組み合わせで作っています。
ピアノでの演奏をMIDIインターフェースでRaspberry PIに読み込み、演奏された音の情報を得て、それに合わせてLEDマトリックスパネルを光らせるように、Pythonでプログラムを組みました。

私は子供の頃にピアノを習っていました。
その間に絶対音感が身に付き、「耳コピー」をすることができるようになりました。
今回のパプリカも、楽譜を見て弾いているのではなく、耳コピーして楽譜なしで弾いています。

ピアノの演奏自体はあまり上手くありませんが、ご視聴いただければ幸いです。
また、弾いてみた動画は今後もアップしていきたいと思います。

count
Viewing all 904 articles
Browse latest View live